Я пытаюсь построить проект C#, используя WinForms (если это поможет), под GNU / Linux, используя Docker и. NET Core Docker image, как объяснено в документации . Отказ от ответственности: я не являюсь экспертом в C# или. NET.
Мой проект структурирован так:
.
├── MyProject.sln
└── MyProject
│ ├── Package1
│ | └── ...
│ ├── Package2
│ | └── ...
│ └── MyProject.csproj
└── MyProjectUnitTests
├── ...
└── MyProjectUnitTests.csproj
В обоих .csproj
файлах, целевая структура версия v4.6.1
:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-->...<-->
<PropertyGroup>
<!-->...<-->
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
</PropertyGroup>
</Project>
Я использую следующий Dockerfile
, например в этом официальном примере :
FROM mcr.microsoft.com/dotnet/core/sdk:3.1.201-buster
WORKDIR /app
# copy all files necessary to resolve dependencies
COPY MyProject.sln .
COPY MyProject/MyProject.csproj MyProject/
COPY MyProjectUnitTests/MyProjectUnitTests.csproj MyProjectUnitTests/
# resolve dependencies
RUN dotnet restore --verbosity normal
# copy all files
COPY . .
RUN dotnet build
Загрузка зависимостей работает правильно (dotnet restore
), но последняя команда (dotnet build
) завершилась с ошибкой:
Build FAILED.
/usr/share/dotnet/sdk/3.1.201/Microsoft.Common.CurrentVersion.targets(1177,5): error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.1 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks [/MyProjectUnitTests/MyProjectUnitTests.csproj]
/usr/share/dotnet/sdk/3.1.201/Microsoft.Common.CurrentVersion.targets(1177,5): error MSB3644: The reference assemblies for .NETFramework,Version=v4.6.1 were not found. To resolve this, install the Developer Pack (SDK/Targeting Pack) for this framework version or retarget your application. You can download .NET Framework Developer Packs at https://aka.ms/msbuild/developerpacks [/MyProject/MyProject.csproj]
0 Warning(s)
2 Error(s)
Я не понимаю ошибки. Ошибки перенаправляют меня на веб-сайт Microsoft, где я могу найти объяснения для загрузки и установки. NET Core 3.1.201, но именно поэтому я использую образ mcr.microsoft.com/dotnet/core/sdk:3.1.201-buster
, чтобы не устанавливать его самостоятельно.
Кажется, что проект отлично работает на Windows (без Docker), но у меня нет машины Windows. Я что-то упускаю в файлах .csproj
? Некоторые говорят, что я должен установить Mono
, но я пытался установить пакет mono-complete
и все еще получал ту же ошибку.
У кого-то есть идеи (это может быть просто небольшая ошибка, так как я не знаю. NET среда очень хорошо)?
Редактировать: сборка завершается с ошибкой. NET Образ ядра, но успешно с моно
Я забыл упомянуть об этом, но сборка внутри контейнера Docker работает с базовым образом mono:6.8.0.96
и следующий Dockerfile:
FROM mono:6.8.0.96
WORKDIR /app
# copy all files necessary to resolve dependencies
COPY MyProject.sln .
COPY MyProject/MyProject.csproj MyProject/
COPY MyProjectUnitTests/MyProjectUnitTests.csproj MyProjectUnitTests/
# resolve dependencies
RUN nuget restore
# copy all files
COPY . .
RUN msbuild
Как указывалось в комментарии @LexLi, необходимо реорганизовать некоторый код (особенно вызовы API WPF, потому что Mono его не поддерживает), но сборка завершается успешно с Mono.
Чтобы избежать этого рефакторинга, я бы хотел использовать базовые образы Microsoft вместо Mono, если это возможно.