仅针对一个框架的 MSBuild 目标

bar*_*iro 3 msbuild build .net-core .net-standard

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

我想分别为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

Mar*_*ich 5

我建议设置自定义属性并对这些属性进行调节。这样,您就不会影响其他项目或参考:

<TargetFrameworks Condition="'$(BuildNetStdOnly)' == 'true'">netstandard2.0</TargetFrameworks>
<TargetFrameworks Condition="'$(BuildNetFxOnly)' == 'true'">net471</TargetFrameworks>
<TargetFrameworks Condition="'$(TargetFrameworks)' == ''">netstandard2.0;net471</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

这样你就可以使用构建

msbuild -p:BuildNetStdOnly=true -p:Configuration=Release -m -nr:false
msbuild -p:BuildNetFxOnly=true -p:Configuration=Release -m -nr:false
Run Code Online (Sandbox Code Playgroud)

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