为什么Silverlight 5 Assembly.LoadFrom被声明为内部

本文关键字:声明 内部 LoadFrom Silverlight Assembly 为什么 | 更新日期: 2023-09-27 18:29:07

  • 长长的叹息*我又像爱丽丝一样,发现自己又一次掉进了兔子洞。也就是微软的决策者

我应该提一下,我从未安装过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); 

在SL4中,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); 

现在我不得不问到底发生了什么?!?SL5中的Load和LoadFrom已更改为内部!为什么?我之所以这么问,是因为在编写代码的各个地方,我都使用LoadFrom从磁盘加载程序集。我的代码最初是为XNA 3编写的,然后移植到XNA 4,再移植到SL4,但由于我正在更新到SL5,LoadFrom不再可用。为什么一个功能在最后2个或更多版本中可用,却在SL5中隐藏了?

我在Silverlight论坛上发布了这个问题,但没有得到回应,SL5的新增内容和更改内容文档似乎也没有提到。

为什么Silverlight 5 Assembly.LoadFrom被声明为内部

来自非silverlight MSDN文章

LoadFrom方法有以下缺点。考虑使用改为加载。

如果已加载具有相同标识的程序集,则LoadFrom即使指定了不同的路径,也会返回加载的程序集。

如果使用LoadFrom加载程序集,然后在中加载程序集加载上下文试图通过显示名称加载相同的程序集加载尝试失败。当程序集被反序列化时,可能会发生这种情况。

如果使用LoadFrom加载程序集,并且探测路径包括具有相同标识但位置不同的程序集InvalidCastException、MissingMethodException或其他意外行为可能发生。

LoadFrom要求FileIOPermissionAccess.Read和上的FileIOPermissionAccess.PathDiscovery或WebPermission指定的路径。

如果assemblyFile存在本机映像,则不使用该映像。这个程序集不能作为非特定于域的程序集加载。

在.NET Framework 1.0和1.1版本中,不应用策略。

一段时间以来,不使用LoadFrom一直是一种很好的做法。我怀疑这只是这种做法的形式化。