(utilizzando .NET Core SDK ) Il modo più semplice per creare un .NET Framework TFM quando è in esecuzione su macOS o Linux utilizzando l'interfaccia a riga di comando di .NET Core, consiste nell'utilizzare i pacchetti Nuget di .NET Framework Targeting Pack di Microsoft (attualmente in anteprima ):
Questi pacchetti consentono di creare progetti .NET Framework su qualsiasi computer con almeno MSBuild o .NET Core SDK installato.
I seguenti scenari e vantaggi sono abilitati per i progetti .NET Framework:
- Crea senza richiedere operazioni di amministrazione per l'installazione di prerequisiti come i pacchetti di targeting di Visual Studio o .NET Framework.
- Crea librerie su qualsiasi sistema operativo supportato da .NET Core SDK.
- Crea progetti basati su Mono.
Puoi includere il metapacchetto Microsoft.NETFramework.ReferenceAssemblies oppure utilizzare solo il pacchetto specifico, che nel tuo caso è Microsoft.NETFramework.ReferenceAssemblies.net461.
Aggiungi il pacchetto al *.csproj
o il tuo Directory.Build.props
:
<Project>
<ItemGroup>
<PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="1.0.0" PrivateAssets="All" />
</ItemGroup>
</Project>
Nota:il PrivateAssets
l'attributo controlla quali risorse di dipendenza verranno consumate ma non passeranno al progetto principale. Consulta i documenti.
Aggiorna
Questo non è più necessario utilizzando .NET 5 SDK (ad es. 5.0.100 ), che ora aggiungerà automaticamente PackageReference
agli assembly di riferimento per .NET Framework .
Per compilare tramite bash su un Mac vanilla, i passaggi minimi sembrano essere:
- Installa Mono 6.0 (5.2 è consigliato per l'interoperabilità VS Mac, non mi interessa, e l'interoperabilità di Mono 6.0 con Dotnet core è migliore)
- Installa dotnet SDK 2.2 (non deve essere esattamente così, ma per me funziona)
- Metti questo in un file Directory.build.props (aperto a miglioramenti se qualcuno ne ha)
<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
ora dovrebbe funzionare - Installa Rider 2019.1 o successivo
- Rider:dovrebbe funzionare (dovrebbe rilevare automaticamente msbuild 16.0 nella sezione degli strumenti di compilazione)