有什麼辦法可以告訴MSBuild 4.0建立目標,但忽略任何依賴關係?我只是想建立自己的目標,沒有別的。建立MSBuild目標沒有依賴關係
回答
我想重申@ EMP的解決方案(我不能投票他,因爲我的小名聲)。
避免重建項目文件中列出的所有依賴項的MSBuild默認行爲的正確方法是將BuildProjectReferences
屬性設置爲false。
在他的回答中,他從MSBuild腳本中調用MSBuild;這裏是命令行的一個例子:
MSBuild myproj.csproj /p:Configuration=Debug /p:BuildProjectReferences=false /t:Build
這取決於你想要建立的目標。
如果目標是內置的並且具有依賴關係(如「Build」),則不能刪除依賴關係。
如果這是你自己的目標,你可以很容易地實現它:
<Target Name="YourTargetWithDependencies"
DependsOnTargets="YourTargetDependencies;YourTarget">
</Target>
<Target Name="YourTarget" >
</Target>
對於CorePublish在Azure雲計算項目以及其他任何與可定製DependsOn目標,你可以嘗試改變項目修改默認依賴列表:
<Target Name=CallPublish>
<!-- Modified list of dependencies. Build is skipped here. -->
<PropertyGroup>
<CustomCorePublishDependsOn>
PrepareForPackaging;
CheckRoleInstanceCount;
CopyServiceDefinitionAndConfiguration;
ConfigureWebDeploy;
IntelliTrace;
</CustomCorePublishDependsOn>
</PropertyGroup>
<MSBuild Projects="$(MSBuildProjectFullPath)"
Targets="CorePublish"
Properties="CorePublishDependsOn=$(CustomCorePublishDependsOn);Configuration=$(Configuration);Platform=$(Platform)">
</Target>
通常一個目標的依賴與屬性指定的,例如:
<Target Name="Foo" DependsOnTargets="$(FooDependsOn)">..</Target>
在可以調用的MSBuild作爲
msbuild bar.proj /p:FooDependsOn=
它設置該屬性不了了之,所以沒有依賴這種情況。
也許可以重寫內置目標,添加自己的條件,並讓目標複製原始內容,但這可能會相當複雜。如果你可以追蹤一個獨立的內置目標,這可以被維護。有時候這些「核心」目標不過是一個DependsOnTargets列表,有時甚至是在一個屬性中定義的,所以重寫它並添加一個缺失的條件是微不足道的。有時候,雖然你需要做一個大的剪切和粘貼來讓它正確。
基本上,MSBuild將只維護任何給定名稱的最後一個目標定義,因此找到您的項目導入包含要覆蓋的目標的.target文件的位置,然後將自己的.target文件導入包含在它之後重寫。
例如,添加的條件從Microsoft.Common.targets了「CoreBuild」目標是,因爲這容易,同時保持相同的行爲,否則(與$(SkipCoreBuild)以下屬性的目標條件):
<Target
Name="CoreBuild"
Condition="'$(SkipCoreBuild)' != 'true'"
DependsOnTargets="$(CoreBuildDependsOn)">
<OnError ExecuteTargets="_TimeStampAfterCompile;PostBuildEvent"
Condition="'$(RunPostBuildEvent)'=='Always' or
'$(RunPostBuildEvent)'=='OnOutputUpdated'"
/>
<OnError ExecuteTargets="_CleanRecordFileWrites" />
</Target>
放置在上面自己的目標,文件和標準後,C#項目導入它...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
...將覆蓋沒有你所需要的條件的默認實現選擇性地禁用它。
在任何情況下,如果您發現不允許您修改條件的目標,我會在Connect上描述您正在嘗試執行的操作,MSBuild人員可以對這種(隨着時間的推移)。
事實證明,內置的Build
目標會檢查名爲BuildProjectReferences
的屬性來判斷是否構建引用。我確實需要在項目本身上運行Build(否則它不起作用),而不是它的依賴關係。我結束了電話:
<MSBuild Projects="MyCloudProject.ccproj" Targets="CorePublish" Properties="Configuration=$(Configuration); BuildProjectReferences=false" />
- 1. MSBuild的依賴沒有建立
- 2. Maven - 建立依賴關係
- 3. MSBuild 4.5忽略項目依賴關係
- 4. 構建目標依賴關係
- 5. 建立nuget依賴關係構建
- 6. 爲什麼MSBuild任務不會構建項目依賴關係?
- 7. 與Cmake建立依賴關係
- 8. 在xslt中建立依賴關係
- 9. 如何建立捆綁依賴關係?
- 10. Maven獨立依賴關係?
- 11. PostgreSQL設計依賴關係樹沒有循環依賴關係
- 12. 使用Maven創建兩個獨立的jar,沒有依賴關係,僅依賴關係
- 13. 自定義MSBuild任務依賴關係
- 14. 目標沒有依賴關係時Makefile行爲不一致
- 15. Visual Studio項目構建依賴關係沒有引用?
- 16. maven force重建依賴項目(首先構建依賴關係)
- 17. maven在多模塊項目中建立依賴關係的jar
- 18. 從Maven項目構建依賴關係?
- 19. Gradle子項目構建依賴關係
- 20. MSBuild,建立不同配置的依賴項目
- 21. 依賴關係的nuget依賴關係
- 22. 建立在Rails中的依賴關係 - 有沒有比after_create更好的模式?
- 23. 指定項目的依賴關係:複製依賴關係?
- 24. VS2010項目依賴關係
- 25. Eclipse項目依賴關係
- 26. Sbt項目依賴關係
- 27. Java項目依賴關係
- 28. CMAKE項目依賴關係
- 29. 創建一個包含所有依賴關係的獨立DLL
- 30. MSBuild和Web部署項目外部依賴關係
是的,它是一個內置的,當然。 – EMP 2011-02-28 09:14:25
@Evgeny,你能指定它嗎? – 2011-02-28 09:33:47
它是.ccproj項目上的CorePublish目標。當然,我可以手動進行內部的任何操作,我只是想知道是否有更好的方法。 – EMP 2011-02-28 11:00:53