新(“ sdk样式”)与旧项目格式的MsBuild条件

wex*_*man 4 msbuild visual-studio

我想编写一个要在新项目(“ sdk样式”)和旧项目中都导入的msbuild“ include”(.props)文件。

有没有办法找出将.props文件导入到哪种类型的项目中,以便我可以在某种情况下使用它?例如,

<PropertyGroup Condition="'$(ProjectType)'=='sdk'">
   <SomeProperty>SomeValue</SomeProperty>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

sim*_*dan 6

我在项目中遇到了同样的需求。最初,我使用解决方案@wexman,但是我发现该变量不可靠。我考虑过打开csproj文件并使用正则表达式来查找sdk属性的方法,但是对我来说它太脆弱了-特别是考虑到sdk可以在元素或属性中指定。最终,我创建了一个启用了二进制日志记录(选项/bl)的构建,并在构建SDK样式的项目时浏览了导入的各种文件。

我发现在props文件中UsingMicrosoftNETSdk设置为的属性,当您使用SDK样式的项目时该属性会true自动导入Microsoft.Common.props。这种自动导入(导致Directory.Build.props的自动导入,似乎是SDK样式项目最重要的定义特征之一,并且该属性的名称使它看起来像更容易粘住。

所以最终我的解决方案是:

Condition="'$(UsingMicrosoftNETSdk)' == 'true'"

(或其相反)作为确定使用哪种类型项目的可靠方法。