2016-01-27 2 views
0

Я использую Unity 5 в течение года, и все прошло отлично до последней недели, когда у нас возникла идея обновить нашу версию IDE до версии 5.3.1.Словарь и элементы, защищенные членами KeyedCollection в Unity3d 5.3.1?

Теперь компилятор показывает две ошибки:

The name `Dictionary' does not exist in the current context. 
The name `Items' does not exist in the current context. 

как локализованные в простом KeyedCollection

public class CommandProcessQueueCollection : KeyedCollection<int, CommandProcessQueue> 
{ 
    public bool TryGetQueue(int id, out CommandProcessQueue queue) 
    { 
     if (Dictionary != null) 
     { 
      return Dictionary.TryGetValue(id, out queue); 
     } 

     foreach (var i in Items) 
     { 
      var k = GetKeyForItem(i); 
      if (Comparer.Equals(id, k)) 
      { 
       queue = i; 
       return true; 
      } 
     } 
     queue = default(CommandProcessQueue); 

     return false; 
    } 

    protected override int GetKeyForItem(CommandProcessQueue queue) 
    { 
     return queue.Id; 
    } 
} 

После нескольких попыток все стало еще сложнее, как тот же самый код был составлен в 5 различных машины с установленным 5.3.1.

Хорошо, 2 из 5 опробовали без ошибок.

Кроме того, msbuild, похоже, скомпилирует код без каких-либо ошибок.

Возможно, существуют различия между машинами в .NetFramework, используемые Mono для компиляций.

У вас есть понятие об этой нечетной проблеме?

PS: Я добавляю using System.Collections.ObjectModel, и моя текущая опция совместимости API в редакторе Unity установлена ​​в .NET 2.0.

+0

FWIW Вы пытались заменить в коде «Словарь» на 'System.Collections.ObjectModel.Dictionary' явно? (Даже думал, что вы «используете».) Могло ли быть горе, вызванное конфликтом? – Fattie

ответ

0

Хорошо, моя команда решена.

В этих машинах Windows Support for Editor 5.3.1f1 не была установлена, поэтому был запущен стандартный модуль веб-проигрывателя, и несколько API .NET не были доступны.

Смежные вопросы