代码之家  ›  专栏  ›  技术社区  ›  smaglio81

msbuild错误:元素<projectreference>中的属性“remove”无法识别

  •  2
  • smaglio81  · 技术社区  · 17 年前

    我正试图设置一个.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>
    

    但是,当我将项目加载到VS 2008中时,会收到错误消息“element<projectreference>中的属性“remove”无法识别”。奇怪的是,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 )而且,在题为“msbuild items”的msdn文章的底部有一条关于它的注释。

    .csproj文件似乎指向.NET 3.5;但我无法验证是否正在使用该版本的msbuild加载项目(是否有人知道如何执行此操作?)

    .csproj文件的第一行:

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

    我有个主意,用条件句 Build with msbuild and dynamically set project references

    1 回复  |  直到 17 年前
        1
  •  10
  •   casperOne    12 年前

    您不能使用 去除 带有静态项的属性。静态项目是声明的项目 外部 目标。只能使用此属性 里面 动态项声明。动态项声明是在目标内部找到的声明。例如,看看下面的构建脚本。

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

    还要注意,您不应该使用 删除=“*” 这并不能消除一切。它将删除当前目录中包含在 项目参考 项目组。如果你想清除一个项目,你必须做 remove=“@(项目引用)” 其中projectreference是项。