Для сборки проекта необходимо выполнить следующие действия:
-
Установить КриптоПро CSP 5.0. Убедиться что введена действующая лицензия.
-
Установить core 3.1 sdk и runtime. Рекомендуются версии runtime 3.1.3 и 3.1.4 и sdk 3.1.300.
-
Задать переменную среды DOTNET_MULTILEVEL_LOOKUP=0.
-
Скачать архив package_linux_debug.zip и разархивировать его в папку packages по некоторому пути
packages_PATH
. -
Скачать архив runtime-debug-linux.zip и и разархивировать его в папку runtime по некоторому пути
runtime_PATH
. -
Изменить файл
~/.nuget/NuGet/NuGet.Config
, добавив в начало узлаpackageSources
источник<add key="local coreclr" value="packages_PATH" />
.
Пример:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="local coreclr" value="../../git/packages" />
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>
- Скопировать сборки NetStandard из репозитория NetStandard.Library в локальную директорию nuget (
~.nuget/packages/
) с заменой.
Пример sh скрипта, выполняющего данную операцию
git clone https://github.com/CryptoProLLC/NetStandard.Library
mkdir -p ~/.nuget/packages/netstandard.library
cp -r ./NetStandard.Library/nugetReady/netstandard.library ~/.nuget/packages/
- Выкачать локально репозиторий текущего проекта.
git clone https://github.com/CryptoProLLC/DotnetCoreSampleProject
- Изменить файл DotnetSampleProject.csproj, указав правильные пути до сборок
System.Security.Cryptography.Pkcs.dll
иSystem.Security.Cryptography.Xml.dll
, указав в качестве путиruntime_PATH
. ИзменитьRuntimeIdentifier
наlinux-x64
Пример:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RuntimeFrameworkVersion>3.1.3</RuntimeFrameworkVersion>
<RuntimeIdentifier>linux-x64</RuntimeIdentifier>
<!-- make self-contained -->
<PackageConflictPreferredPackages>Microsoft.Private.CoreFx.NETCoreApp;runtime.win-x64.Microsoft.Private.CoreFx.NETCoreApp;runtime.linux-x64.Microsoft.Private.CoreFx.NETCoreApp;$(PackageConflictPreferredPackages)</PackageConflictPreferredPackages>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Private.CoreFx.NETCoreApp" Version="4.7.0-dev.20163.1" />
</ItemGroup>
<ItemGroup>
<Reference Include="System.Security.Cryptography.Pkcs">
<HintPath>../runtime/netcoreapp-Linux-Debug-x64/System.Security.Cryptography.Pkcs.dll</HintPath>
</Reference>
<Reference Include="System.Security.Cryptography.Xml">
<HintPath>../runtime/netcoreapp-Linux-Debug-x64/System.Security.Cryptography.Xml.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
- Перейти в папку проекта. Восстановить зависимости и собрать проект. Запустить полученный проект.
cd DotnetCoreSampleProject
dotnet restore
dotnet build
dotnet run
В случае возникновения ошибки или предупреждения о несовпадения найденой и указанной весии Microsoft.Private.CoreFx.NETCoreApp
изменить версию в файле DotnetSampleProject.csproj
.
-
Выполнить шаги 1-3, 7 из "Сборка проекта без сборки corefx".
-
Выкачать репозиторий corefx.
-
Выполнить сборку corefx, перейдя в локальную папку репозитория и выполнив
build.sh
. -
Выполнить шаги 6, 8-10 из "Сборка проекта без сборки corefx", использовав в качестве пути
packages_PATH
путь видаcorefx_PATH/artifacts/packages/Debug/NonShipping
, в качестве путиruntime_PATH
путь видаcorefx_PATH/artifacts/bin/runtime/netcoreapp-Linux-Debug-x64
, гдеcorefx_PATH
путь до локальной папки репозитория corefx.
В случае внесения изменений в репозиторий corefx, перед его сборкой необходимо очистить папки
~/.nuget/packages/microsoft.private.corefx.netcoreapp
, ~/.nuget/packages/runtime.Linux-x64.microsoft.private.corefx.netcoreapp
, corefx_PATH/artifacts/packages
после чего завершить все процессы dotnet core.
Дополнительную информацию можно получить тут: