(utilizando .NET Core SDK ) La forma más sencilla de compilar para un .NET Framework TFM cuando se ejecuta en macOS o Linux utilizando la CLI de .NET Core, es utilizar los paquetes Nuget de .NET Framework Targeting Pack de Microsoft (actualmente en vista previa ):
Estos paquetes permiten crear proyectos de .NET Framework en cualquier máquina que tenga instalado al menos MSBuild o .NET Core SDK.
Los siguientes escenarios y beneficios están habilitados para proyectos de .NET Framework:
- Cree sin necesidad de operaciones administrativas para instalar requisitos previos como Visual Studio o paquetes de orientación de .NET Framework.
- Cree bibliotecas en cualquier sistema operativo compatible con .NET Core SDK.
- Cree proyectos basados en Mono.
Puede incluir el metapaquete Microsoft.NETFramework.ReferenceAssemblies o usar solo el paquete específico, que en su caso es Microsoft.NETFramework.ReferenceAssemblies.net461.
Agrega el paquete al *.csproj
o tu Directory.Build.props
:
<Project>
<ItemGroup>
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>
</Project>
Nota:El PrivateAssets
El atributo controla qué activos de dependencia se consumirán pero no fluirán al proyecto principal. Ver los documentos.
Actualizar
Esto ya no es necesario con el .NET 5 SDK (por ejemplo, 5.0.100 ), que ahora agregará automáticamente el PackageReference
a los ReferenceAssemblies para .NET Framework .
Para compilar a través de bash en un Mac normal, los pasos mínimos parecen ser:
- Instale Mono 6.0 (se recomienda 5.2 para la interoperabilidad VS Mac, no me importa eso, y la interoperabilidad de Mono 6.0 con el núcleo Dotnet es mejor)
- Instala dotnet SDK 2.2 (no tiene que ser exactamente eso, pero funciona para mí)
- Pon esto en un archivo Directory.build.props (abierto a mejoras si alguien tiene alguna)
<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>
- Golpe:
dotnet build SolutionFileName.sln
ahora debería funcionar - Instalar Rider 2019.1 o posterior
- Rider:debería funcionar (debería detectar automáticamente msbuild 16.0 en la sección de herramientas de compilación)