Почему Silverlight 5 Assembly.LoadFrom объявлен внутренним? - PullRequest
4 голосов
/ 26 марта 2012
  • Долгий вздох * Снова, как Алиса, я снова падаю в кроличью нору.Ака, Microsoft, принимающий решения.

Я должен упомянуть, что я никогда не устанавливал бета-версию SL5.Я ждал до тех пор, пока после фактического выпуска.Перед установкой официального релиза v5.

Поэтому, используя Telerik JustDecompile (замена .NET Reflector), я загрузил следующие SL-сборки и просто для тщательности добавил в WP7 ...

C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v3.0\mscorlib.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\mscorlib.dll
C:\Program Files (x86)\Microsoft Silverlight\5.0.61118.0\mscorlib.dll
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone\mscorlib.dll 

В WP7 System.Reflection.Assembly содержит следующие методы ...

public static Assembly Load(string assemblyString);
public static Assembly LoadFrom(string assemblyFile); 

В SL3 System.Reflection.Assembly содержит следующие методы ...

public static Assembly Load(string assemblyString);
public static Assembly Load(byte[] rawAssembly);
public static Assembly Load(byte[] rawAssembly, byte[] rawSymbolStore);
public static Assembly LoadFrom(string assemblyFile); 

InSL4 System.Reflection.Assembly содержит следующие методы ...

public static Assembly Load(string assemblyString);
public static Assembly Load(byte[] rawAssembly);
public static Assembly Load(byte[] rawAssembly, byte[] rawSymbolStore);
public static Assembly LoadFrom(string assemblyFile); 

В SL5 System.Reflection.Assembly содержит следующие методы ...

public static Assembly Load(string assemblyString);
internal static Assembly Load(byte[] rawAssembly);
internal static Assembly Load(byte[] rawAssembly, byte[] rawSymbolStore);
internal static Assembly LoadFrom(string assemblyFile); 

Теперь я должен спроситьтолько что, черт возьми, происходит?!?Load и LoadFrom в SL5 изменились на внутренние!Зачем?Я спрашиваю, потому что в разных местах, хотя из моего кода я использую LoadFrom, чтобы загрузить сборку с диска.Мой код изначально был написан для XNA 3, затем портирован на XNA 4, затем на SL4, но, поскольку я обновляюсь до SL5, LoadFrom больше не доступен.Почему функция должна быть доступна для последних 2 или более версий только для того, чтобы она была скрыта в SL5?

Я разместил этот вопрос на форумах Silverlight без ответа и в SL5что нового и что изменилось, документы, кажется, не упоминают об этом.

1 Ответ

0 голосов
/ 17 апреля 2012

Из статьи без серебряного света MSDN

Метод LoadFrom имеет следующие недостатки. Рассмотреть возможность использования Загрузите вместо.

Если сборка с такой же идентификацией уже загружена, LoadFrom возвращает загруженную сборку, даже если указан другой путь.

Если сборка загружается с помощью LoadFrom, а затем сборка в загрузка контекста пытается загрузить ту же сборку по отображаемому имени, Попытка загрузки не удалась. Это может произойти при десериализации сборки.

Если сборка загружена с LoadFrom, и путь зондирования включает сборка с той же идентичностью, но другим местоположением, InvalidCastException, MissingMethodException или другое непредвиденное поведение может возникнуть.

LoadFrom требует FileIOPermissionAccess.Read и FileIOPermissionAccess.PathDiscovery или WebPermission на указанный путь.

Если для AssemblyFile существует собственное изображение, оно не используется. сборка не может быть загружена как нейтральная к домену.

В .NET Framework версий 1.0 и 1.1 политика не применяется.

В течение некоторого времени было хорошей практикой не использовать LoadFrom. Я подозреваю, что это только формализация этой практики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...