【问题标题】:MSBuild target for one framework only仅适用于一个框架的 MSBuild 目标
【发布时间】:2019-05-01 09:32:44
【问题描述】:

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

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

目前我使用这个 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 输出。

【问题讨论】:

  • 你试过/p:TargetFrameworks=netstandard2.0s)吗?
  • 您的解决方案中是否有不针对 netstandard2.0 的项目?我很确定未能构建的项目将是这些其他项目之一..

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


【解决方案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 来为每次调用再次恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多