我有一个具有多框架目标的项目-<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>
。
我想分别为netframework
和netstandard
构建解决方案。
当前,我使用以下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
输出。
答案 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来为每次调用再次还原。