2013-03-11 128 views
1

我對MSBuild的目標屬性和一般目標標記之間感到困惑。MSBuild的目標屬性和目標標記之間的區別

下面的代碼是否編譯成msbuild myapp.sln /t:Rebuild並且在.NET中是「重建」預定義的目標。

<Target Name="Build" DependsOnTargets="Clean"> 
    <MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"/> 
</Target> 

編輯:

<?xml version="1.0" encoding="utf-8" ?> 
<Project DefaultTargets="Full" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup>...</PropertyGroup> 
    <ItemGroup>...</ItemGroup> 
    <Target Name="Clean"> 
    <Message Text="Cleaning..."/> 
    <RemoveDir Directories="$(BuildWebOutputDir);$(BuildRoot)" /> 
    </Target> 

    <Target Name="Build"> 
    <Message Text="Building solution..."/> 
    <MSBuild Projects="@(ProjectToBuild)" Targets="Rebuild"> 
    </MSBuild> 
    </Target> 

    <Target Name="Copy"> 
    <Message Text="Copying..."/> 
    <Exec Command="xcopy.exe $(BuildWebOutputDir) $(DistDir) /e /f /y /i" /> 
    </Target> 

    <Target Name="Full" DependsOnTargets="Clean;Build;Copy"> 
    </Target> 

<Target> 

</Project> 

回答

1

的重建目標是爲每個項目定義的預定義的msbuild目標,在CSHARP的情況下,存在在每個的csproj到一個MSBuild庫的鏈接 - 與線<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />.

這個文件內嵌入的是目標的行爲,重建開始<Target Name="Rebuild">

+0

感謝您的回答。那麼,如果在MSBuild文件中定義了具有名稱重建的新目標,會發生什麼情況。是否獨立於預定義的一個因素我經常將目標名稱視爲構建,清理等。 – Sunny 2013-03-11 11:56:39

+0

如果在導入導入的目標文件之前定義了一個名爲rebuild的新目標,則會使用導入的版本。如果您在此之後定義它,則新的替換導入的一個。你確定你的目標不在你的csproj之外嗎? – 2013-03-11 12:39:54

+0

我已經包含用於MSBuild的配置文件。那麼,它是否執行配置文件中定義的所有目標,並執行項目「重建」。 – Sunny 2013-03-11 13:12:43

相關問題