![](/img/trans.png)
[英]Resolve .NET 4.7 external project NuGet dependencies via MSBuild targets
[英]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文件的上下文中“運行”。 為此,根據您的設置,我將設置兩個屬性之一
CustomAfterMicrosoftCSharpTargets或CustomAfterMicrosoftCommonTargets
最簡單的方法是像這樣設置這些
<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.