MSBuild错误:元素<ProjectReference>中的属性"删除"无法识别

sma*_*o81 2 .net msbuild visual-studio-2008 visual-studio

我正在尝试将.csproj文件设置为具有条件项组,该组将删除<ProjectReference>项组中的所有元素.

例如:

<ItemGroup>
   <ProjectReference Include="..\..\..\..\Projects\Registrar\Ucsb.Sa.Registrar.Common\Ucsb.Sa.Registrar.Common\Ucsb.Sa.Registrar.Common.csproj">
      <Project>{1EDDDE57-0181-41B4-B2AE-FB76450F85C8}</Project>
      <Name>Ucsb.Sa.Registrar.Common</Name>
   </ProjectReference>
</ItemGroup>
<ItemGroup Condition="$(OnBuildServer) == 'true'">
   <ProjectReference Remove="*" />
</ItemGroup>
<ItemGroup Condition="$(OnBuildServer) == 'true'">
   <Reference Include="Ucsb.Sa.Registrar.Common">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>$(RegCommonDll)</HintPath>
   </Reference>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

但是,当我将项目加载到VS 2008时,我收到错误消息'属性'删除元素<ProjectReference>中的"无法识别".奇怪的是删除属性在架构中(C:\ Program Files\Microsoft Visual Studio 9.0\Xml\Schemas\1033\MSBuild\Microsoft.Build.Core.xsd).上面有MSDN文档(http://msdn.microsoft.com/en-us/library/bb651786.aspx).并且,在MSDN文章"MSBuild Items"的底部有一个关于它的评论.

.csproj文件似乎指向.NET 3.5; 但我无法验证是否正在使用该版本的msbuild加载项目(有人知道该怎么做吗?)

.csproj文件的第一行:

<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
Run Code Online (Sandbox Code Playgroud)

PS.我有了使用Build with msbuild的条件并动态设置项目引用的想法

Say*_*imi 10

您不能将" 删除"属性与静态项一起使用.静态项目是在目标之外声明的项目.您只能在动态项声明中使用此属性.动态项声明是在目标内部找到的声明.例如,看看下面的构建脚本.

<Project ToolsVersion="3.5" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <ProjectReference  Include="One.dll"/>
  </ItemGroup>
  <Target Name="Demo">
    <ItemGroup>
      <ProjectReference  Remove="@(ProjectReference)"/>
    </ItemGroup>
    <Message Text="ProjectReference : @(ProjectReference)"/>
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

另请注意,您不应使用不会删除所有内容的Remove ="*".它将删除当前目录中包含在ProjectReference项目组中的每个文件.如果要清除项目,则必须执行Remove ="@(ProjectReference)",其中ProjectReference是项目.