linux - 如何在 Mac 或 Linux 上的 .NET Core 上构建多目标解决方案?

标签 linux msbuild .net-core csproj

我有针对多 objective-c sproj 文件的解决方案:

<PropertyGroup>
  <TargetFrameworks>net45;netstandard1.6</TargetFrameworks>
</PropertyGroup>

<PropertyGroup>
  <TargetFrameworks>net45;netcoreapp1.1</TargetFrameworks>
</PropertyGroup>

我正在尝试在 Linux 上构建此解决方案的 .NET Core 部分,但无法管理它。如果我跑

dotnet build

它构建了所有目标:netcoreapp1.1 , netstandard1.6net45并在 net45 上失败,因为 .NET Core 不在 Linux 上提供 .NET 4.5 平台。我试图通过将 mono 指定为构建框架来解决此问题,但解决方案很复杂,而且并不是所有 .NET 4.5 的东西都在 mono 中受支持。然而,这可以帮助其他人避免 can't find .NETFramework v4.5只需运行:

FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet restore
FrameworkPathOverride=/usr/lib/mono/4.5/ dotnet build

当我运行 dotnet build /p:TargetFramework=netcoreapp1.1我遇到了很多错误,我想是因为带有 netstandard1.6 的项目没有建成。

如果我通过了

  dotnet build /p:TargetFrameworks=netcoreapp1.1\;netstandard1.6

我明白了

MSBUILD : error MSB1006: Property is not valid.
Switch: netstandard1.6

我怎样才能通过 netcoreapp1.1netstandard1.6从命令行同时将目标框架定位到 msbuild?

我知道我可以添加额外的属性并根据它进行条件编译,但我不想更改 csproj 来实现此解决方法。

最佳答案

如果您真的不想尝试在 Linux 上构建完整的框架或 PCL 版本,而只想要一个 .net 核心应用程序或 .net 标准库,您可以修改项目文件 (.csproj) 仅在 Windows 上实现多目标,并且在非 Windows 上表现得像一个针对单个框架的项目,如下所示:

<PropertyGroup>
  <TargetFrameworks>netcoreapp1.1;net45</TargetFrameworks>
  <TargetFrameworks Condition="'$(OS)' != 'Windows_NT'">netcoreapp1.1</TargetFrameworks>
</PropertyGroup>

这允许为所有项目分别为非 Windows 指定 netstandard*netcoreapp*,并且仅使用 .net core 版本的应用程序将能够仅使用普通 dotnet restore/dotnet build 命令。

关于linux - 如何在 Mac 或 Linux 上的 .NET Core 上构建多目标解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43555302/

相关文章:

c# - 在 Azure Functions 中,如何在输出绑定(bind)中使用路由参数

linux - LS 命令未在 Amazon EC2 中列出文件

c# - MSBuild web.config 转换不工作

c# - ASP.NET Core 中必需的查询字符串参数

c# - 刷新内存缓存 ASP.NET Core 2

visual-studio - 如何防止在 Release模式构建中复制 XML 文档文件?

linux - bash 脚本执行多个 iptables 链

mysql - 无法在redmine中启动mysql

linux - 库链接到/usr/lib64,但我需要来自/usr/local/lib64 的链接

css - dotless:如何使用 dotless.Compiler.exe 处理 LESS 文件列表