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

时间:2015-08-21 06:08:55

标签: c#

我有一个简单的c#应用程序,我想从self.e1_input = IntVar() self.e2_input = IntVar() ... self.e1 = ttk.Entry(self, textvariable=self.e1_input, validate='all', ...) self.e2 = ttk.Entry(self, textvariable=self.e2_input, validate='all', ...) ... 引用一个程序集,而不将该东西复制到bin文件夹。

我有办法改变如何引用/加载程序集吗?

编辑:程序集不在gac中

2 个答案:

答案 0 :(得分:1)

实际上,在运行时可以在配置中使用<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获取更具体的信息。此解决方案的缺点是您必须手动指定程序集版本。

答案 1 :(得分:0)

您问题的多种解决方案。

通过选择.dll属性来避免将库复制到输出文件夹集Copy Local为false。

选项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")

希望这有帮助!