VS和导入的msbuild项目文件

时间:2012-04-17 17:10:39

标签: msbuild fxcop itemgroup

我的一个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>

基本上我要做的是在我的所有项目文件中都有上面的import语句,然后通过调整导入的项目文件来操作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

0 个答案:

没有答案