Dot-Net

使用 Assembly.LoadFrom 的 loadFromRemoteSources 錯誤

  • April 25, 2012

我在載入程序集的 .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

原來問題是因為該文件可能是從網際網路上下載的。

修復右鍵點擊->屬性->取消阻止

在此處輸入圖像描述

這就是我設法讓它工作的方法,而不需要在客戶端點擊任何東西:

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

引用自:https://stackoverflow.com/questions/8268503