【问题标题】:Why is Silverlight 5 Assembly.LoadFrom declared internal?为什么 Silverlight 5 Assembly.LoadFrom 声明为内部?
【发布时间】:2012-03-26 19:32:41
【问题描述】:
  • 长长的叹息 * 再次像爱丽丝一样,我发现自己又一次跌入兔子洞。又名 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); 

在 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 what's new and what's changed 文档似乎也没有提及。

【问题讨论】:

  • 我不确定范围为什么会改变。我最好的猜测是它们曾经被标记为 SecurityCritical 然后在以后的更新中只是在内部进行。如果要将程序集加载到内存中,请尝试 AssemblyPart.Load 方法。
  • 嗯,[FriendAccessAllowed],这很新颖。你如何变得友好尚不清楚。

标签: c# silverlight


【解决方案1】:

来自non-silverlight MSDN article

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

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

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

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

LoadFrom 要求 FileIOPermissionAccess.Read 和 FileIOPermissionAccess.PathDiscovery 或 WebPermission,在 指定路径。

如果 assemblyFile 存在本机映像,则不使用它。这 程序集不能作为域中性加载。

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

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

【讨论】:

    猜你喜欢
    • 2015-06-27
    • 2013-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 1970-01-01
    相关资源
    最近更新 更多