仅针对一个框架的MSBuild目标

时间:2018-11-29 10:34:50

标签: build msbuild .net-core .net-standard

我有一个具有多框架目标的项目-<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>

我想分别为netframeworknetstandard构建解决方案。

当前,我使用以下MSBuild命令:

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

我尝试了tu运行此命令:

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

但是它失败了,即使第一个命令也通过并建立了netstandard输出。

1 个答案:

答案 0 :(得分:1)

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

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

通过这种方式,您可以使用

msbuild -p:BuildNetStdOnly=true -p:Configuration=Release -m -nr:false
msbuild -p:BuildNetFxOnly=true -p:Configuration=Release -m -nr:false

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