我有一个共同的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
。
答案 0 :(得分:1)
正如您所说,您需要在各个csproj文件的上下文中“运行”。为此,根据您的设置,我将设置两个属性之一
CustomAfterMicrosoftCSharpTargets 或 CustomAfterMicrosoftCommonTargets
最简单的方法是设置这些
<Target Name="my-compile-target">
<MSBuild Projects="%(SolutionFile.FullPath)"
Properties="CustomAfterMicrosoftCSharpTargets=$(PathToCustomTargetProj);" />
</Target>
在这种情况下,您将 $(PathToCustomTargetProj)设置为某个文件路径,该路径具有在csproj管道中运行的目标。您可以将其设置为 compile.targets ,然后将调用 check-typescript-options ,因为 BeforeTargets 将被正确评估和满足。