Самый простой способ построить Dotnet SDK проект, требующий net461 на MacOS

У меня есть дотнет SDK .slnbuild.proj) с участием <TargetFrameworks>netcoreapp2.1;net461</TargetFrameworks>, Он построен на Windows с использованием Visual Studio и dotnet build, но я также хотел бы построить как можно больше других мест. Что мне нужно поместить в мой README.md и / или что я могу поместить в файлы проекта, чтобы он строился на Rider и / или на bash на Mac?

2 ответа

Решение

(В настоящее время) Самый простой способ создать TFM для.NET Framework при работе в MacOS или Linux с использованием CLI.NET Core- это использовать пакеты Nuget для пакета.NET Framework Targeting Pack от Microsoft (в настоящее время в режиме предварительного просмотра):

Эти пакеты позволяют создавать проекты.NET Framework на любом компьютере, на котором установлен хотя бы MSBuild или.NET Core SDK.

Следующие сценарии и преимущества включены для проектов.NET Framework:

  • Выполните сборку, не требуя операций администратора для установки необходимых компонентов, таких как пакеты таргетинга для Visual Studio или.NET Framework.
  • Сборка библиотек в любой операционной системе, поддерживаемой.NET Core SDK.
  • Создавайте моно-проекты.

Вы можете включить метапакет https://www.nuget.org/packages/Microsoft.NETFramework.ReferenceAssemblies/; или используйте только конкретный пакет, который в вашем случае является https://www.nuget.org/packages/Microsoft.NETFramework.ReferenceAssemblies.net461/.

Добавьте пакет в *.csproj или ваш Directory.Build.props:

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

Обратите внимание PrivateAssets Атрибут управляет тем, какие активы зависимостей будут использоваться, но не будут передаваться в родительский проект. Смотрите документы.

Для сборки через bash на ванильном Mac минимальные шаги:

  • Установите Mono 6.0 (рекомендуется 5.2 для взаимодействия с VS Mac, меня это не волнует, и взаимодействие 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 в разделе инструментов сборки)
Другие вопросы по тегам