我在.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
答案 0 :(得分:21)
事实证明问题是因为该文件可能是从互联网上下载的。
修正右键单击 - >属性 - >不阻止
答案 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来集中解锁文件。我找到了关于这个主题的超级用户的好讨论。