我正在尝试将.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中时,我收到错误消息“属性”删除元素&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
中的条件的想法答案 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是项目。