为什么Silverlight 5 Assembly.LoadFrom声明为internal?

时间:2012-03-26 19:32:42

标签: c# silverlight

  • 长长的叹息*再次像爱丽丝一样,我发现自己又一次在兔子洞里翻滚。 AKA是微软决策者。

我应该提到我从未安装过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中.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中.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中.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不再可用。为什么最后两个或更多版本的功能只能在SL5中隐藏

我已经在Silverlight论坛中发布了这个问题而没有回复,而SL5的新内容和更改的文档似乎没有提及它。

1 个答案:

答案 0 :(得分:0)

来自non-silverlight MSDN article

  

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

     

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

     

如果一个程序集加载了LoadFrom,后来又加载了一个程序集   load context尝试按显示名称加载相同的程序集   加载尝试失败。将程序集反序列化时可能会发生这种情况。

     

如果装配有LoadFrom,并且探测路径包含   具有相同身份但位置不同的集会   InvalidCastException,MissingMethodException或其他意外   行为可能会发生。

     

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

     

如果assemblyFile存在本机映像,则不使用它。该   程序集无法作为域中立加载。

     

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

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