在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法

Simplest way to build dotnet SDK project requiring net461 on MacOS

我有一个带有 <TargetFrameworks>netcoreapp2.1;net461</TargetFrameworks> 的 dotnet SDK .sln(和一个 build.proj)。它基于 Windows 使用 Visual Studio 和 dotnet build,但我也希望它能构建尽可能多的其他地方。我需要在我的 README.md and/or 中放入什么 我可以在项目文件中放入什么以使其在 Rider and/or 上从 bash 在 [=22= 上构建]?

为了通过 bash 在原版 Mac 上构建,最少的步骤似乎是:

  • 安装 Mono 6.0(建议 VS Mac 互操作使用 5.2,我不关心这个,Mono 6.0 与 Dotnet 核心的互操作更好)
  • 安装 dotnet SDK 2.2(不必完全如此,但对我有用)
  • 将其放入 Directory.build.props 文件(如果有人有任何改进,欢迎改进)
<Project>
     <PropertyGroup>
       <IsOSX Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::OSX)))'== 'true'">true</IsOSX>
     </PropertyGroup>
     <PropertyGroup Condition=" '$(IsOSX)' == 'true' ">
        <FrameworkPathOverride>/Library/Frameworks/Mono.framework/Versions/Current/Commands/../lib/mono/4.6.1-api</FrameworkPathOverride>
     </PropertyGroup>
</Project>
  • Bash:dotnet build SolutionFileName.sln 现在应该可以工作了
  • 安装 Rider 2019.1 或更高版本
  • Rider:应该可以正常工作(它应该在构建工具部分自动检测 msbuild 16.0)

(using .NET Core SDK) 构建 .NET Framework[=42 的最简单方法=] TFM when running on either macOS or Linux using the .NET Core CLI, is to utilize the .NET Framework Targeting Pack Nuget Packages 来自 Microsoft当前处于预览状态):

These packages enable building .NET Framework projects on any machine with at least MSBuild or the .NET Core SDK installed.

The following scenarios and benefits are enabled for .NET Framework projects:

  • Build without requiring admin operations to install pre-requisites such as Visual Studio or .NET Framework targeting packs.
  • Build libraries on any operating system supported by the .NET Core SDK.
  • Build Mono-based projects.

您可以包含 Microsoft.NETFramework.ReferenceAssemblies 元包; 或者只使用特定的包,在你的情况下 Microsoft.NETFramework.ReferenceAssemblies.net461.

将包添加到 *.csproj 或您的 Directory.Build.props:

<Project>
  <ItemGroup>
    <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
  </ItemGroup>
</Project>

注意:PrivateAssets 属性控制哪些依赖资产将被消耗但不会流向父项目。参见 the docs

更新

不再需要使用 .NET 5 SDK(例如 5.0.100),它现在会自动添加 PackageReferenceReferenceAssemblies for .NET Framework.