2014-11-06 60 views
0

因此,這裏是我的問題 - 我有一個應用程序「A」,它使用了一個常見的dll「Login.dll」。 這個常見的DLL放在一個文件夾「CommonDll」中。這個DLL應該被許多應用程序訪問。爲此,我將以下代碼放在調用應用程序「A」的配置中:無法從特定文件夾加載程序集

<runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="Login" culture="neutral" publicKeyToken="105c4b5bbc9d3d16"/> 
      <codeBase version="1.0.0.0" href="file:///C:/CommonDll/Login.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 

這在我的本地機器上工作得很好。但是,如果我把相同的文件夾結構在其他機器上,並部署此應用程序,它給了我一個錯誤 無法加載文件或程序集'登錄,版本= 1.0.0.0,文化=中立,PublicKeyToken = 105c4b5bbc9d3d16'或其依賴之一。該系統找不到指定的文件。

,但客戶端機器上,如果我運行此

file:///C:/CommonDll/Login.dll 

這是瞄準正確的DLL。如果您使用自動裝配解決

任何建議或觀點表示高度讚賞...

+0

您是否考慮過使用[GAC](http://msdn.microsoft.com/en-us/library/yf1d93sz(v = vs.110).aspx) – 2014-11-06 08:12:43

+0

您是否已經檢查過Login.dll的文件屬性?也許它在目標機器上被阻止,因爲它是從一個(不受信任的)網絡位置複製的。 – Filburt 2014-11-06 08:18:26

+0

或者也許Login.dll引用其他程序集。 – Reniuz 2014-11-06 08:22:28

回答

0

您的問題,建議立即進行刪除DBE解決。我喜歡使用下面的代碼:

var yourCommondDllFolder = new DirectoryInfo("C:/CommonDll/").GetFiles("*.dll"); 

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => 
{ 
    var dll = yourCommondDllFolder.FirstOrDefault(fi => fi.Name == args.Name); 
    if (dll == null) 
    { 
     return null; 
    } 

    return Assembly.Load(dll.FullName); 
}; 

比您的應用程序域試圖解決程序集時,它無法加載。

相關問題