我的项目中有一个条件引用(基于x86 vs x64的构建配置),当我为一个对象生成单元测试时(通过右键单击类名并选择“Create Unit Tests ...”) Visual Studio(2012)坚持为x86版本的dll添加对单元测试项目的引用。唯一的问题是这个引用已经存在于与我的主项目中相同的条件形式。
大部分时间我没有意识到这种情况发生在我将其合并到我们的UAT环境以构建不同的配置之前。此时它会中断,因为UAT环境需要x64 dll。
有没有办法解决这个 bug 功能?
如果它有任何区别,这里是条件参考:
<Reference Include="ceTe.DynamicPDF.Printing" Condition="'$(Configuration)' == 'Debug' OR '$(Configuration)' == 'Release'">
<HintPath>..\References\ceTe.DynamicPDF.Printing.40.x86.dll</HintPath>
</Reference>
<Reference Include="ceTe.DynamicPDF.Printing" Condition="'$(Configuration)' == 'Dev' OR '$(Configuration)' == 'Test' OR '$(Configuration)' == 'Production'">
<HintPath>..\References\ceTe.DynamicPDF.Printing.40.x64.dll</HintPath>
</Reference>
这是Visual Studio尝试添加的引用,大概是因为它无法协调条件引用是等效的:
<Reference Include="ceTe.DynamicPDF.Printing.40.x86, Version=1.0.1.15925, Culture=neutral, PublicKeyToken=09b5ce0d5c0a9d8b, processorArchitecture=x86">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\References\ceTe.DynamicPDF.Printing.40.x86.dll</HintPath>
</Reference>
提前感谢您的帮助。
答案 0 :(得分:0)
我能够提出的解决方案是添加如下参考:
<Reference Include="ceTe.DynamicPDF.Printing.40.x86" Condition="'$(Configuration)' == 'Debug' OR '$(Configuration)' == 'Release'">
<HintPath>..\References\ceTe.DynamicPDF.Printing.40.x86.dll</HintPath>
</Reference>
<Reference Include="ceTe.DynamicPDF.Printing.40.x64" Condition="'$(Configuration)' == 'Dev' OR '$(Configuration)' == 'Test' OR '$(Configuration)' == 'Production'">
<HintPath>..\References\ceTe.DynamicPDF.Printing.40.x64.dll</HintPath>
</Reference>
我不是百分百肯定,但我相信这个工作的原因(或者更确切地说,为什么之前没有工作)是因为Include="<AssemblyName>"
匹配dll的名称,所以当单位在创建测试时,Visual Studio将其视为相同的引用,并且不会尝试再次添加它。