使用.config文件中的codebase元素从任意路径加载程序集

时间:2011-05-04 17:13:55

标签: .net deployment

我的问题是试图弄清楚如何从任意位置加载.NET程序集。在我的场景中,我不想使用子目录(排除探测路径方法)或GAC。由于多个调用者使用该程序集,因此子目录方法会导致存储程序集的多个副本。 GAC场景是长期答案,但是采用这种方法需要付出一些努力。对于Visual Studio 2010,我将GAC用法视为具有以下主要选项:内置安装程序受到了很多批评,InstallShield Limited版本非常可爱,但似乎不支持GAC(当然,付费的InstallShield版本也是如此) ,WiX被认为具有使用的学习曲线。

我提到GAC的所有这些主要是因为提出这个问题的众多人似乎总是指向GAC的方向。令人沮丧的是,因为代码库元素似乎正是我对我的强名称调用者和被称为程序集的要求。    我的app.config文件如下所示:

<?xml version="1.0"?>
<configuration>
  <startup>

  <supportedRuntime version="v2.0.50727"/></startup>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft.com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="SharedProgramTest"
                          Culture="neutral"
                          PublicKeyToken="c422f85319da5fe0"
                          />
        <codeBase version ="1.0.0.1"
                  href="file:///D:/SomewhereElse/SharedProgramTest.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

谢谢,    约翰威格尔

1 个答案:

答案 0 :(得分:1)

Assembly.LoadFile或Assembly.LoadFrom是否符合您的要求?

如果没有,我想你可以挂钩到AppDomain.AssemblyResolve事件:
http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx