使用Assembly.LoadFrom的loadFromRemoteSources错误

时间:2011-11-25 11:33:23

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

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

  

尝试从网络位置加载程序集   会导致程序集在之前的版本中被沙箱化   .NET Framework。这个版本   .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

3 个答案:

答案 0 :(得分:21)

事实证明问题是因为该文件可能是从互联网上下载的。

修正右键单击 - >属性 - >不阻止

enter image description here

答案 1 :(得分:2)

这就是我设法让它工作的方式,而无需在客户端点击任何内容:

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

请记住,如果CreateDomain with 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

答案 2 :(得分:1)

在Jon上捎带,我遇到了这个问题,但在许多不同的文件夹中有很多程序集。我从Sysinternals下载了Streams来集中解锁文件。我找到了关于这个主题的超级用户的好讨论。

Streams from Sysinternals Super User discussion