在预构建任务中更新AssemblyVersion会导致测试失败

时间:2010-12-09 15:15:00

标签: c# msbuild

我们有一个简单的任务,在编译之前,使所有AssemblyInfo.cs文件都可编辑,然后更新

[assembly:AssemblyVersion(“1.0.0.0”)]

[assembly:AssemblyVersion(“1.0.0。<SourceGetVersion>”)]

我们所有的程序集都使用相同的密钥签名。

这种事情可能是相当标准的,它可以正常工作,除非它导致测试失败。

失败看起来像这样:

  

测试方法   Namespace.Tests.MessageTest.TestMethod   抛出异常:   System.IO.FileLoadException:不能   加载文件或程序集   “Namespace.BusinessLayer.BusinessComponent.Documents,   版本= 1.0.0.4344,文化=中立,   PublicKeyToken = xxxxxxxxxxxxxxxx'或   其中一个依赖项。位于   程序集的清单定义   与程序集引用不匹配。   (HRESULT异常:0x80131040)

所以,我打开了建议的日志记录,并得到了这个:

  

W,3964,90,2010 / 12 / 07,09:57:43.059,   TFSBUILD \ QTAgent32.exe,获取   类型的自定义属性   System.Reflection.RuntimeMethodInfo   抛出异常(将忽略并使用   反思方式):   System.IO.FileLoadException:不能   加载文件或程序集   “Namespace.BusinessLayer.BusinessEntity,   版本= 1.0.0.4344,文化=中立,   PublicKeyToken = xxxxxxxxxxxxxxxx'或   其中一个依赖项。位于   程序集的清单定义   与程序集引用不匹配。   (HRESULT异常:0x80131040)   文件名:   “Namespace.BusinessLayer.BusinessEntity,   版本= 1.0.0.4344,文化=中立,   PublicKeyToken = xxxxxxxxxxxxxxxx'在   System.Reflection.CustomAttribute._CreateCaObject(RuntimeModule   pModule,IRuntimeMethodInfo pCtor,   字节** ppBlob,字节* pEndBlob,Int32 *   pcNamedArgs)   System.Reflection.CustomAttribute.CreateCaObject(RuntimeModule   模块,IRuntimeMethodInfo ctor,   IntPtr的&安培; blob,IntPtr blobEnd,Int32&amp;   namedArgs)   System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule   decoratedModule,Int32   decoratedMetadataToken,Int32   pcaCount,RuntimeType   attributeFilterType,Boolean   mustBeInheritable,IList   derivedAttributes,Boolean   isDecoratedTargetSecurityTransparent)   在   System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeMethodInfo   方法,RuntimeType caType,布尔值   继承)   System.Reflection.RuntimeMethodInfo.GetCustomAttributes(布尔   继承)   Microsoft.VisualStudio.TestTools.Common.ReflectHelper.GetAttributes(的MemberInfo   info,Boolean bInherit)

     

===预绑定状态信息===日志:用户=域\ tfsbuildAccount   日志:DisplayName =   Namespace.BusinessLayer.BusinessEntity,   版本= 1.0.0.4344,文化=中立,   公钥= XXXXXXXXXXXXXXXX   (完全指定)LOG:Appbase =   文件:/// d:/构建/ 4/10 / TestResults / tfsbuildAccount-TFSBUILD   2010-12-07 09_56_54_x86_Debug / Out日志:   初始PrivatePath = NULL调用   部件 :   Namespace.BusinessLayer.BusinessComponent.Edi.Tests,   版本= 1.0.0.4344,文化=中立,   公钥= XXXXXXXXXXXXXXXX。   ===日志:此绑定在默认加载上下文中启动。日志:使用应用程序   配置文件:   d:\构建\ 4 \ 10个\ TestResults \ tfsbuildAccount-TFSBUILD   2010-12-07   09_56_54_x86_Debug \输出\ Namespace.BusinessLayer.BusinessComponent.Edi.Tests.DLL.config   日志:使用主机配置文件:   日志:使用机器配置文件   从   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中。   日志:政策后参考:   Namespace.BusinessLayer.BusinessEntity,   版本= 1.0.0.4344,文化=中立,   PublicKeyToken = xxxxxxxxxxxxxxxx日志:   试图下载新的URL   文件:/// d:/构建/ 4/10 / TestResults / tfsbuildAccount-TFSBUILD   2010-12-07   09_56_54_x86_Debug /输出/ Namespace.BusinessLayer.BusinessEntity.DLL。   警告:比较程序集名称   导致不匹配:修订版   数字错误:无法完成设置   汇编(hr = 0x80131040)。探测   终止。

现在,我可能已经混淆了发布此内容的程序集,但它与所有测试的模式相同。请注意,公钥都是一样的,我可以看到所有的修订号都是一样的。

我们做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试将引用程序集更改为非特定于版本。程序集的属性选项卡中的“特定版本=假”。