从路径加载程序集,而不将其复制到bin文件夹

本文关键字:复制 bin 文件夹 加载 路径 程序集 | 更新日期: 2023-09-27 18:08:58

我有一个简单的c#应用程序,我想从C:'..'..myassembly.dll引用一个程序集,而不把它复制到bin文件夹。

我有一种方法来改变如何汇编被引用/加载?

编辑:程序集不是gac

从路径加载程序集,而不将其复制到bin文件夹

实际上可以在运行时通过在配置中使用<codeBase>标记:

<configuration>
<runtime>
   <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
         <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
         <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
      </dependentAssembly>
   </assemblyBinding>
</runtime>
</configuration>

您可以参考MSDN以获得更具体的信息。此解决方案的缺点是您必须手动指定程序集版本。

你的问题有多种解决方案

为了避免复制库到输出文件夹设置Copy Local为false通过选择。dll属性。

选项1:

在您的配置文件中包含以下部分,并允许运行时从您指定的位置加载。

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyAssembly" publicKeyToken="2d65620afb84f19d" />
        <codeBase version="1.0.0.0" href="C:'..'..myassembly.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

选项2:

众所周知的选项,使用反射来加载程序集。

Assembly.Load(@"C:'..'..myassembly.dll")