我有两个程序集,许多应用程序都使用了这个程序集。我不必在GAC中拥有此功能。
有没有办法在不使用GAC的情况下共享许多应用程序可公开访问的程序集
我的客户不想将这些dll转储到GAC中,因为这些程序集由三个应用程序使用所以我不想在GAC中保留
答案 0 :(得分:1)
有一些方法可以在应用程序之间共享程序集。虽然最推荐的是通过GAC,但您还有其他选择:
您可以在应用程序基目录下指定一个子目录来搜索程序集。我认为这对您无效,因为这对不同的应用程序无效。
您可以指定共享程序集所在的Uri。在您的情况下,这些程序集必须是强名称的,以便它们可以位于共享的公共目录中。
另请注意,CodeBase
标记只能在计算机配置或发布者策略文件中使用。
<?xml version="1.0" encoding="utf?8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas?microsoft?com:asm.v1">
<dependentAssembly>
<codeBase version="1.0.0.0"
href= "file:///c:\Shared Assemblies\MySharedAssembly.dll"/>
</dependentAssembly>
</assemblyBinding>
</runtime>
</configuration>
这是迄今为止查找共享程序集最不复杂的机制。基本上,ApplicationDomain在解决程序集失败时会引发事件。您的应用程序可以捕获此事件,以便从任何位置手动返回所需的程序集。
class Example
{
public static void Main()
{
AppDomain.CurrentDomain.AssemblyResolve += OnAssemblyResolve;
// Uses MySharedAssembly
Foo();
...
}
private static Assembly OnAssemblyResolve(object sender, ResolveEventArgs args)
{
// I guess requested assemblyName is located in this file.
var file = @"c:\Shared Assemblies\MySharedAssembly.dll";
try
{
return Assembly.LoadFile(file);
}
catch (Exception)
{
...
}
return null;
}
}