无法从特定文件夹加载程序集

时间:2014-11-06 08:08:51

标签: c# .net .net-assembly relative-path

所以这是我的问题 - 我有一个申请" 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>

这在我的本地机器上工作得非常好。但是,如果我将相同的文件夹结构放在其他计算机上并部署此应用程序,它会给我一个错误 无法加载文件或程序集&#39;登录,版本= 1.0.0.0,文化=中立,PublicKeyToken = 105c4b5bbc9d3d16&#39;或其中一个依赖项。系统找不到指定的文件。

但是在客户端机器上如果我运行这个

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

这是针对正确的dll。

任何建议或观点都受到高度赞赏......

1 个答案:

答案 0 :(得分:0)

如果您使用自动装配解决,您的问题将得到解决。我想使用以下代码:

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);
};

比您的应用程序域尝试在无法加载时解析程序集。