【问题标题】:loadFromRemoteSources error using Assembly.LoadFrom使用 Assembly.LoadFrom 的 loadFromRemoteSources 错误
【发布时间】:2011-11-25 11:33:23
【问题描述】:

我在加载程序集的 .Net 4 Winforms 应用程序中有以下代码。所有文件都在 C: 上。有许多 DLL 可以正常工作,但有以下两个错误:

尝试从网络位置加载程序集 会导致程序集在以前的版本中被沙盒化 .NET 框架。本次发布 .NET Framework 默认情况下不启用 CAS 策略,所以这 负载可能很危险。如果此负载不打算对 程序集,请启用 loadFromRemoteSources 开关。看 http://go.microsoft.com/fwlink/?LinkId=155569 了解更多信息。

这似乎只是某些 PC 上的问题

代码如下:

strDLLs = Directory.GetFileSystemEntries(strPath, "*.dll")
For intIndex = 0 To strDLLs.Length - 1
    Try
        objDLL = [Assembly].LoadFrom(strDLLs(intIndex))
        ExamineAssembly(objDLL, strInterface, Plugins)

    Catch e As Exception
        ' MsgBox("Error whilst loading Library: " & strDLLs(intIndex) & ". Reported Error was:" & vbCrLf & e.ToString)
    End Try
Next

【问题讨论】:

标签: .net vb.net .net-4.0 code-access-security


【解决方案1】:

原来问题是因为文件可能是从互联网上下载的。

修复右键 -> 属性 -> 取消阻止

【讨论】:

  • 当我在 Visual Studio 的设计器中遇到此错误时,这解决了我的问题。
【解决方案2】:

这就是我设法让它工作的方法,而不需要在客户端点击任何东西:

var appDomain = AppDomain.CreateDomain(assemblyName);
var assembly = appDomain.Load(File.ReadAllBytes(assemblyName));

请记住,如果您使用 Evidence 参数创建域,您将获得“此方法使用 CAS 策略,该策略已被 .NET Framework 废弃。”消息。

或者,您可以设置一个适当的沙箱:

http://msdn.microsoft.com/en-us/library/bb763046.aspx http://blogs.msdn.com/b/shawnfa/archive/2005/08/08/449050.aspx

【讨论】:

    【解决方案3】:

    捎带乔恩,我遇到了这个问题,但在许多不同的文件夹中有很多程序集。我从 Sysinternals 下载了 Streams 以解除对文件的阻止。我在超级用户上找到了关于这个话题的很好的讨论。

    Streams from Sysinternals Super User discussion

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多