我应该提到我从未安装过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的新内容和更改的文档似乎没有提及它。
答案 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是一种很好的做法。我怀疑这只是这种做法的形式化。