2012-11-27 79 views
4

我能夠使用這種形式加載DLL -負載從共享網絡驅動器在C#中的DLL

System.Reflection.Assembly assembly = 
System.Reflection.Assembly.LoadFile(@"C:\Users\amit.pandey\Documents\Visual Studio 2010\Projects\bin\Release\EUtility.dll"); 

但是我需要從共享網絡驅動器加載DLL以下面的方式 -

System.Reflection.Assembly assembly = 
System.Reflection.Assembly.LoadFile(@"\\falmumapp20\EUtility.dll"); 

我知道這是由於信任問題引起的。我嘗試了各種可用的代碼,但無法使其工作。有人可以幫助我加載從網絡驅動器的DLL的示例代碼?

我想在代碼本身做到這一點,而不必更改任何配置文件。

+0

你在什麼.NET版本?你得到了什麼確切的異常/錯誤? –

+0

上午使用.Net 4.0,我得到的錯誤是從我的本地計算機上加載相同的DLL,但是當我嘗試從遠程計算機加載它時,它會失敗並說可信域問題。 –

+0

確保您可以訪問您正在存儲該dll的共享。在工作中,我總是不得不重新連接到參考份額,因爲它關閉了一臺機器,因爲它失去了連接並且不允許使用dll。 – wjhguitarman

回答

3

另外,從磁盤加載文件和字節數組上調用Assembly.Load似乎工作(框架4):

 string Share = @"R:\Test\TestAssembly.dll"; 
     byte[] AssmBytes = File.ReadAllBytes(Share); 
     Assembly a = Assembly.Load(AssmBytes); 

     //Invoking a method from the loaded assembly 
     var obj = a.CreateInstance("TestAssembly.Class1"); 
     obj.GetType().InvokeMember("HelloWorld", BindingFlags.InvokeMethod, null, obj, null); 

由於LoadFrom() MS塊網絡負載,這將表明,這樣做可能是不最佳實踐。但是,這與在EXE中將程序集作爲資源經常使用的過程類似。

5

您需要告訴機器相信該位置。

您可以使用caspol實用程序執行此操作。

+3

重要說明:在.NET Framework版本4和更高版本中,除非元素設置爲true,否則Caspol.exe不會影響CAS策略。有關詳細信息,請參閱.NET Framework 4中的安全性更改。請參閱http://msdn.microsoft.com/zh-CN/library/cb6t8dtz%28v=vs.100%29.aspx –

+0

感謝您使用此免責聲明。 (上次我有一個可信任的位置問題是2.0) – hometoast

+0

這是正確的,答案是可以接受的,但是如果我不必使用caspol實用程序並在代碼本身內部執行它,該怎麼辦。問題是我們必須將其交付給客戶,並且我們希望代碼能夠負責加載,並且不需要在客戶端進行維護/修改。 –

相關問題