2014-11-06 39 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); 
}; 

比您的应用程序域试图解决程序集时,它无法加载。

相关问题