通常来说一个程序添加了引用之后,最后执行时简单将所有引用到的assembly放在同一个目录下就可以了。不过,也可能需要这样的情况,就是使用到不是同一个目录下的assembly。
这个问题在KB 837908中有描述,讲了如下三种方法:
第一个方法:将assembly放到GAC中
第二个方法:就是在.config文件中加入<codeBase>标签
如:
如何在运行时加载不处于应用程序目录下的assembly<configuration>
如何在运行时加载不处于应用程序目录下的assembly   
<runtime>
如何在运行时加载不处于应用程序目录下的assembly      
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
如何在运行时加载不处于应用程序目录下的assembly         
<dependentAssembly>
如何在运行时加载不处于应用程序目录下的assembly            
<assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
如何在运行时加载不处于应用程序目录下的assembly            
<codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
如何在运行时加载不处于应用程序目录下的assembly         
</dependentAssembly>
如何在运行时加载不处于应用程序目录下的assembly      
</assemblyBinding>
如何在运行时加载不处于应用程序目录下的assembly   
</runtime>
如何在运行时加载不处于应用程序目录下的assembly
</configuration>
第三个方法:使用AssemblyResolve事件
这个方法利用了AppDomain的AssemblyResolve事件,在程序开始注册这个事件,然后就可以在这个事件中处理了。比如:
如何在运行时加载不处于应用程序目录下的assemblyprivate System.Reflection.Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
}


除了这三种方法外,还有如下的方法
第一个方法就是使用反射,自己动态Load assembly。这种方法不是很好,因为这样不能添加这个assembly的引用,所以要在程序中反射得出方法、属性等。
第二:如果要用到的assembly是处于需要引用程序执行文件的下级子目录中,就可以有下面两种方式:
a、使用probing元素,如
如何在运行时加载不处于应用程序目录下的assembly<configuration>
如何在运行时加载不处于应用程序目录下的assembly   
<runtime>
如何在运行时加载不处于应用程序目录下的assembly      
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
如何在运行时加载不处于应用程序目录下的assembly         
<probing privatePath="bin;bin2\subbin;bin3"/>
如何在运行时加载不处于应用程序目录下的assembly      
</assemblyBinding>
如何在运行时加载不处于应用程序目录下的assembly   
</runtime>
如何在运行时加载不处于应用程序目录下的assembly
</configuration>
b、利用AppDomain的AppendPrivatePath
比如:AppDomain.CurrentDomain.AppendPrivatePath("common");

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-16
  • 2021-09-25
  • 2021-07-14
  • 2022-12-23
  • 2021-12-15
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-02-17
  • 2021-11-15
  • 2021-11-16
  • 2022-12-23
相关资源
相似解决方案