2009-07-23 65 views
1

我試圖設置一個.csproj文件,使其具有一個條件項目組,它將刪除<ProjectReference>項目組中的所有元素。MSBuild錯誤:元素<ProjectReference>中的屬性「Remove」無法識別

例如:

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

但是,當我加載該項目進入2008年VS,我得到錯誤信息「中的元素‘刪除’屬性<ProjectReference>是無法識別」奇怪的是, 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

我也嘗試將註冊表項更改爲默認值3.5。這些鍵不會配置Visual Studio,而是在創建新項目時配置默認值(http://msdn.microsoft.com/zh-cn/library/bb397428.aspx,\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ 3.5 \,\ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 2.0 \)。 那當然沒有辦法。 我也經歷了PATH環境變量,並用3.5替換了所有對2.0目錄的引用。 同樣,這並沒有產生解決方案。 – smaglio81 2009-07-24 02:07:46

回答

8

您不能使用刪除屬性與靜態項目。靜態項目是以外的目標。您只能在動態項目聲明的內使用此屬性。動態項目聲明是在目標中找到的項目聲明。例如,看看下面的構建腳本。

<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是項目。

+0

有沒有辦法去除靜態項目? – citizenmatt 2014-12-15 20:37:50

相關問題