MSBuild错误:元素<projectreference>中的“删除”属性无法识别</projectreference>

时间:2009-07-23 21:55:46

标签: .net visual-studio visual-studio-2008 msbuild

我正在尝试将.csproj文件设置为具有条件项组,该组将删除&lt; ProjectReference&gt;中的所有元素。项目组。

例如:

<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>

但是,当我将项目加载到VS 2008中时,我收到错误消息“属性”删除元素&lt; ProjectReference&gt;无法识别“。奇怪的是,Remove属性位于架构中(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">

PS。我有了使用Build with msbuild and dynamically set project references

中的条件的想法

1 个答案:

答案 0 :(得分: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>

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