仅针对一个框架的MSBuild目标

仅针对一个框架的MSBuild目标,build,msbuild,.net-core,.net-standard,Build,Msbuild,.net Core,.net Standard,我有一个多框架目标项目-netstandard2.0;net471 我想分别为netframework和netstandard构建解决方案 当前我使用此MSBuild命令: MSBuild MySln.sln/t:Build/p:Configuration=Release/p:Platform=“Any CPU”/m/nr:False 我尝试运行此命令: MSBuild CxAudit.sln/t:Build/p:Configuration=Release/p:Platform=“Any CPU

我有一个多框架目标项目-
netstandard2.0;net471

我想分别为
netframework
netstandard
构建解决方案

当前我使用此MSBuild命令:

MSBuild MySln.sln/t:Build/p:Configuration=Release/p:Platform=“Any CPU”/m/nr:False

我尝试运行此命令:

MSBuild CxAudit.sln/t:Build/p:Configuration=Release/p:Platform=“Any CPU”/p:TargetFramework=netstandard2.0/m/nr:False
(使用/p:TargetFramework=netstandard2.0


但是它失败了,甚至第一个命令也通过并构建了
netstandard
输出。

我建议设置一个自定义属性并对这些属性进行条件化。这样,您就不会影响其他项目或引用:

<TargetFrameworks Condition="'$(BuildNetStdOnly)' == 'true'">netstandard2.0</TargetFrameworks>
<TargetFrameworks Condition="'$(BuildNetFxOnly)' == 'true'">net471</TargetFrameworks>
<TargetFrameworks Condition="'$(TargetFrameworks)' == ''">netstandard2.0;net471</TargetFrameworks>

请注意,之所以设置复数版本,是因为如果两个目标框架都恢复了项目,则需要将
TargetFramework
设置为内部版本的全局属性。如果要设置单数的
TargetFramework
,还需要通过将
-restore
参数也传递给msbuild来为每次调用再次还原。

是否尝试过
/p:TargetFrameworks=netstandard2.0
(使用
s
)?解决方案中是否有不针对
netstandard2.0
的项目?我敢肯定,未能建设的项目将是其他项目之一。。
msbuild -p:BuildNetStdOnly=true -p:Configuration=Release -m -nr:false
msbuild -p:BuildNetFxOnly=true -p:Configuration=Release -m -nr:false