【问题标题】:nUnit - ignore GAC copy of a DLLnUnit - 忽略 DLL 的 GAC 副本
【发布时间】:2010-09-20 11:56:49
【问题描述】:

我正在使用 nUnit 对程序集进行单元测试。

程序集位于我的项目输出目录 (\bin\debug) 中,并从该位置加载到 nUnit(程序集 > 添加程序集)中。

但是,GAC 中也有一个旧版本,而 nUnit 正在选择这个版本。

我当然可以删除旧版本并在构建时重新安装到 GAC,但这需要一些时间 - 任何强制 nUnit(或更可能是 .NET 框架)从 bin\debug 中获取版本的方法目录?

编辑

两个版本的 AssemblyVersion(以及因此的强名称)是固定的 - 它只是根据 KB 556041 - How to use Assembly Version and Assembly File Version 更改的文件版本

【问题讨论】:

  • 只有当您的 bin\debug-copy(和您的项目参考)与 GAC 中的版本号相同时才会发生这种情况。
  • AssemblyVersion 编号相同,我添加了额外的 cmets 来解释这一关键信息,我很糟糕!

标签: .net nunit gac


【解决方案1】:

您可以尝试在您的 .config 文件中创建一个 <bindingRedirect> 以重定向到您的本地程序集,并且不使用安装在 GAC 中的程序集。

当您针对强名称程序集构建 .NET Framework 应用程序时,该应用程序默认在运行时使用该程序集版本,即使有可用的新版本也是如此。但是,您可以将应用程序配置为针对较新版本的程序集运行

...

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity
            name="myAssembly"
            publicKeyToken="32ab4ba45e0a69a1"
            culture="neutral" />
        <bindingRedirect
            oldVersion="1.0.0.0"
            newVersion="2.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

这对你来说可能也很有趣:

希望有帮助!

【讨论】:

  • +1 作为一个很好的参考(虽然我知道绑定重定向)但这对我没有帮助,因为 GAC 中的版本具有相同的 AssemblyVersion
  • 好吧,如果程序集版本相同并且您无法更改它,那么您几乎没有机会,因为 .NET 首先从 GAC 中找到它。这不是 nUnit 行为,而是标准 .NET 行为。
【解决方案2】:

在这种情况下,我倾向于在单元测试时不对程序集进行签名,直到我准备好部署它。这是一个一步过程,您可以转到项目属性并清除签署程序集设置。重新编译时,下次运行测试时,NUnit 将从本地 bin 文件夹中提取它,因为未签名的程序集无法部署到 GAC。我发现即使您在 GAC 中已经有程序集的版本,如果您引用项目测试的程序集,它仍然会采用未签名的版本。 完成测试后,重新打开设置并进行部署。

不理想,因为您现在需要完成额外的步骤,但我可以在不做大量工作的情况下尽可能接近。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 1970-01-01
    • 2016-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多