VS和导入的msbuild项目文件

VS和导入的msbuild项目文件,msbuild,fxcop,itemgroup,Msbuild,Fxcop,Itemgroup,我的一个msbuild项目文件中有一条导入语句: <Import Project="$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" Condition="Exists('$(ProjectDir)..\CommonProjectProperties\OurCommon.targets" /> 导入的msbuild项目具有以下属性组: <PropertyGroup Condition="'$(Configur

我的一个msbuild项目文件中有一条导入语句:

<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是否运行

问题是,在命令行中,所有这些都可以正常工作,但常量代码分析除外,我必须使用类似于msbuild/t:build proj.sln/p:DefineConstants=CODE\u ANALYSIS=true的内容设置常量代码分析。那很好

从VS2010 IDE它只是。。。地狱看起来VS正在考虑导入的msbuild项目文件中的所有内容。。。。除了 1包含的文件显示为灰色,这意味着只有在打开“显示所有文件”时,才会在IDE中显示该文件。这意味着它没有被编译。我可以将完全相同的ItemGroup复制到父msbuild项目文件中,该文件将在解决方案资源管理器中显示为非灰色,这意味着它已编译。 2抑制文件用于告诉FXCop在进行代码分析时忽略哪些对象。当我将抑制文件作为项目的一部分正确编译时,FXCop似乎忽略了它。读到这里,显然需要打开CODE_分析常量。我想我是从导入的项目文件中做的,但它没有得到尊重。即使VS IDE中的“项目属性”窗口显示它是一个已定义的常量。同样,当我将DefinedConstansts声明移动到父项目文件中时,IDE尊重该常量

所以。。。我不确定是否需要将这篇文章分为两篇,但以下是我的问题: 1如何让IDE尊重和编译导入项目文件中列出的文件? 2如何让IDE尊重导入的项目文件中的定义状态