簡體   English   中英

從外部msbuild目標文件訪問項目屬性

[英]Accessing project properties from an external msbuild targets file

我有一個公共的compile.targets文件,該文件用於構建許多不同的解決方案。 在該文件中,我想檢查是否有任何包含的項目正在使用TypeScript,如果要使用它們,請驗證是否在那些項目中設置了某些屬性(即TypeScriptNoImplicitAny )。 我目前正在構建這樣的解決方案:

  <Target Name="my-compile-target">
    <MSBuild Projects="%(SolutionFile.FullPath)"/>
  </Target>

我想要的是能夠創建一個為解決方案中的每個.csproj運行的任務,該任務可以訪問.csproj設置的所有屬性。

這可能嗎? 嘗試過的一種解決方法是將BeforeTargets屬性與我知道的用於編譯TypeScript的目標一起使用:

<Target Name="check-typescript-options" BeforeTargets="CompileTypeScript;CompileTypeScriptWithTSConfig">
    <Message Condition="'$(TypeScriptToolsVersion)' != ''" Text="Tools Version is $(TypeScriptToolsVersion)"></Message>
    <Message Condition="'$(TypeScriptToolsVersion)' == ''" Text="No tools version found"></Message>
</Target>

不幸的是,MSBuild給我警告,這些TypeScript目標不存在,因此check-typescript-options被忽略。

如您所說,您需要在單個csproj文件的上下文中“運行”。 為此,根據您的設置,我將設置兩個屬性之一

CustomAfterMicrosoftCSharpTargetsCustomAfterMicrosoftCommonTargets

最簡單的方法是像這樣設置這些

<Target Name="my-compile-target">
    <MSBuild Projects="%(SolutionFile.FullPath)"
             Properties="CustomAfterMicrosoftCSharpTargets=$(PathToCustomTargetProj);"  />
</Target>

在這種情況下,您需要將$(PathToCustomTargetProj)設置為某些文件路徑,該文件路徑具有在csproj管道中運行的目標。 您可以將其設置為compile.targets ,然后您的check- typescript -options選項將被調用,因為BeforeTargets將被正確評估和滿足。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM