2010-09-20 58 views
6

我正在使用nUnit来测试程序集。nUnit - 忽略DLL的GAC副本

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

但是,旧版本也在GAC中,nUnit正在选择此版本。

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

编辑

的的AssemblyVersion(因而强名称)的两个版本是固定的 - 改变按KB 556041 - How to use Assembly Version and Assembly File Version

+0

只有当您的bin \ debug-copy(和您的项目引用)具有与GAC中相同的版本号时,才会发生这种情况。 – sisve 2011-01-25 19:32:14

+0

AssemblyVersion数字是相同的,我已经添加了额外的注释来解释这个关键信息,我不好! – Ryan 2011-01-26 07:31:46

回答

1

你可以尝试做一个<bindingRedirect>在你的config文件到其唯一的文件版本重定向到您的本地程序集并且不使用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> 

这也可能对你很有意思:

希望有帮助!

+2

+1作为一个很好的参考(我知道绑定重定向虽然),但这并不能帮助我,因为GAC中的版本具有相同的AssemblyVersion – Ryan 2011-01-26 07:30:48

+0

好吧,如果程序集版本相同并且不能更改它几乎没有机会,因为.NET首先从GAC中找到它。这不是一个nUnit行为,它是一个标准的.NET。 – 2011-01-26 21:46:15

0

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

并不理想,因为您现在需要经过额外的步骤,但尽可能在没有做大量工作的情况下完成。