在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法
Posted
技术标签:
【中文标题】在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法【英文标题】:Simplest way to build dotnet SDK project requiring net461 on MacOS 【发布时间】:2019-08-06 18:29:52 【问题描述】:我有一个带有<TargetFrameworks>netcoreapp2.1;net461</TargetFrameworks>
的dotnet SDK .sln
(和一个build.proj
)。它使用 Visual Studio 和dotnet build
在 Windows 上构建,但我也希望它能够构建尽可能多的其他地方。我需要在我的 README.md 中添加什么和/或我可以在项目文件中添加什么以使其在 Rider 和/或 Mac 上的 bash 上构建?
【问题讨论】:
【参考方案1】:(使用 .NET Core SDK).NET Framework TFM 在任一 macOS 或 Linux 使用 .NET Core CLI,是利用来自 Microsoft 的 .NET Framework Targeting Pack Nuget Packages(当前处于预览阶段):
这些包允许在至少安装了 MSBuild 或 .NET Core SDK 的任何机器上构建 .NET Framework 项目。
为 .NET Framework 项目启用了以下场景和优势:
无需管理员操作即可安装 Visual Studio 或 .NET Framework 目标包等先决条件。 在 .NET Core SDK 支持的任何操作系统上构建库。 构建基于 Mono 的项目。
您可以包含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)不再需要此操作,它现在会自动将 PackageReference
添加到 ReferenceAssemblies 用于 .NET 框架。
【讨论】:
效果很好,谢谢!更重要的是,感谢您抽出宝贵时间对所有装饰物做出如此详细的回答——希望它能获得应有的支持!【参考方案2】:为了在普通 Mac 上通过 bash 构建,最少的步骤似乎是:
安装 Mono 6.0(VS Mac 互操作推荐 5.2,我不在乎,Mono 6.0 与 Dotnet 内核互操作更好) 安装 dotnet SDK 2.2(不必完全一样,但对我有用) 把它放在 Directory.build.props 文件中(如果有人有的话,可以改进)Bash:<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>
dotnet build SolutionFileName.sln
现在应该可以工作了
安装 Rider 2019.1 或更高版本
Rider:应该只是工作(它应该在构建工具部分自动检测 msbuild 16.0)
【讨论】:
以上是关于在 MacOS 上构建需要 net461 的 dotnet SDK 项目的最简单方法的主要内容,如果未能解决你的问题,请参考以下文章
项目未在活动配置中构建 Visual Studio MacOS .net Core
netstandard2.0 (.net standard 2.0) 类库不能引用 net461 (.net framework 4.6.1) 类库
使用将 net461 设置为唯一框架的 ASP.NET Core Web 应用程序 (.NET Core) 与使用 (.NET Framework) 模板之间的区别