我的一个 msbuild 项目文件中有一个 import 语句:
<Import Project="$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" Condition="Exists('$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" />
导入的 msbuild 项目具有以下属性组:
<PropertyGroup Condition="'$(Configuration)' == 'Debug' And '$(SolutionName)' == 'Ourwork' And Exists('$(ProjectDir)..\..\FXCopSettings\OurGlobal.ruleset')">
<CodeAnalysisRuleSet>$(ProjectDir)..\..\FXCopSettings\OurGlobal.ruleset</CodeAnalysisRuleSet>
<RunCodeAnalysis>true</RunCodeAnalysis>
<CodeAnalysisIgnoreGeneratedCode>True</CodeAnalysisIgnoreGeneratedCode>
<DefineConstants>$(DefineConstants);CODE_ANALYSIS</DefineConstants>
</PropertyGroup>
以及以下项目组:
<When Condition="Exists('$(ProjectDir)\..\..\Solutions\FXCopSettings\GlobalSuppressions.cs') And Exists('$(ProjectDir)$(ProjectName).csproj')">
<ItemGroup>
<Compile Include="$(ProjectDir)\..\..\Solutions\FXCopSettings\GlobalSuppressions.cs" />
</ItemGroup>
</When>
基本上我要做的是在我的所有项目文件中都有上述导入语句,然后通过调整导入的项目文件来操纵 FXCop 是否运行。
问题是,从命令行,所有这些都可以正常工作(除了常量 CODE_ANALYSIS,我必须使用 msbuild /t:build proj.sln /p:DefineConstants="CODE_ANALYSIS=true" 之类的东西来设置它。没关系。
从 VS 2010 IDE 来看,它只是......地狱!它“看起来”像 VS 尊重导入的 msbuild 项目文件中的所有内容......除了
1)包含的文件是灰色的,这意味着只有在“显示所有文件”时才会在 IDE 中显示。这意味着它没有编译。我可以将完全相同的 ItemGroup 复制到父 msbuild 项目文件中,并且该文件在解决方案资源管理器中显示为非灰色,这意味着它已被编译。
2) 抑制文件用于告诉 FXCop 在进行代码分析时忽略哪些对象。当我将抑制文件正确编译为项目的一部分时,FXCop 似乎忽略了它。阅读此内容,显然需要打开 CODE_ANALYSIS 常量。我以为我是从导入的项目文件中做的,但没有得到尊重。即使 VS IDE 中的项目属性窗口显示它是一个已定义的常量。同样,当我将 DefinedConstansts 声明移动到父项目文件之一时,IDE 会尊重该常量。
所以......我不确定我是否需要将它分成两个帖子,但这是我的问题:
1)我如何让 IDE 尊重和编译导入的项目文件中列出的文件?
2)如何让 IDE 在导入的项目文件中尊重 DefineConstants