gpt4 book ai didi

docker - Docker中的.NET Core 2.0 Identity Server + MVC-在MacOS上构建失败

转载 作者:行者123 更新时间:2023-12-02 18:38:58 33 4
gpt4 key购买 nike

我正在尝试从MacOS对NET核心2.0应用程序进行Docker化,这是一个使用Identity Server 4的MVC应用程序。我找不到有关此错误消息的任何信息:

MacBook-Pro-3:myproject myuser$ sudo docker build -t mycompany/myproject .
Password:
Sending build context to Docker daemon 122.6MB
Step 1/10 : FROM microsoft/aspnetcore-build:2.0 AS build-env
---> 76ce1481a4b8
Step 2/10 : WORKDIR /app
---> Using cache
---> e4ac320f97de
Step 3/10 : COPY *.csproj ./
---> Using cache
---> d6e02527b792
Step 4/10 : RUN dotnet restore
---> Running in b3545ba0375f
System.BadImageFormatException: Could not load file or assembly 'System.Security.Cryptography.Primitives, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. An attempt was made to load a program with an incorrect format.

File name: 'System.Security.Cryptography.Primitives, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
at Microsoft.DotNet.Cli.Telemetry.Sha256Hasher.HashWithNormalizedCasing(String text)
at Microsoft.DotNet.Cli.Utils.ApplicationInsightsEntryFormat.<>c__DisplayClass10_0.<WithAppliedToPropertiesValue>b__1(KeyValuePair`2 p)
at System.Linq.Enumerable.ToDictionary[TSource,TKey,TElement](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at Microsoft.DotNet.Cli.Utils.ApplicationInsightsEntryFormat.WithAppliedToPropertiesValue(Func`2 func)
at Microsoft.DotNet.Cli.Telemetry.TelemetryFilter.<Filter>b__3_0(ApplicationInsightsEntryFormat r)
at System.Linq.Enumerable.SelectListIterator`2.ToList()
at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
at Microsoft.DotNet.Cli.Telemetry.TelemetryFilter.Filter(Object objectToFilter)
at Microsoft.DotNet.Cli.Utils.TelemetryEventEntry.SendFiltered(Object o)
at Microsoft.DotNet.Cli.Program.ProcessArgs(String[] args, ITelemetry telemetryClient)
at Microsoft.DotNet.Cli.Program.Main(String[] args)


The command '/bin/sh -c dotnet restore' returned a non-zero code: 1

该应用程序可以在我的机器(Docker外部)上构建并正常运行-仅在运行“docker build -t mycompany / myproject”时才会发生。

这是我的Dockerfile:
FROM microsoft/aspnetcore-build:2.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM microsoft/aspnetcore:2.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]

如果这样做有帮助,那么这里是Web应用程序的.csproj文件:
<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<UserSecretsId>some-guid-000-0000-0000-00</UserSecretsId>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Consul" Version="0.7.2.4" />
<PackageReference Include="IdentityServer4.AspNetIdentity" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.6" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.2" PrivateAssets="All" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="2.0.3" PrivateAssets="All" />
</ItemGroup>

<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.Extensions.SecretManager.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Tools" Version="2.0.0" />
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\..\MyCompany.Core.Model\MyCompany.Core.Model.csproj" />
<ProjectReference Include="..\MyCompany.Core.Contract\MyCompany.Core.Contract.csproj" />
<ProjectReference Include="..\MyCompany.Core.Service\MyCompany.Core.Service.csproj" />
<ProjectReference Include="..\MyCompany.Core.ViewModel\MyCompany.Core.ViewModel.csproj" />
<ProjectReference Include="..\MyCompany.Core\MyCompany.Core.csproj" />
<ProjectReference Include="..\MyCompany.Data.Contract\MyCompany.Data.Contract.csproj" />
<ProjectReference Include="..\MyCompany.Data.Model\MyCompany.Data.Model.csproj" />
<ProjectReference Include="..\MyCompany.Data\MyCompany.Data.csproj" />
</ItemGroup>

<ItemGroup>
<Folder Include="Scripts\view\" />
<Folder Include="Scripts\view\home\" />
</ItemGroup>

</Project>

更新:我还尝试在Dockerfile中使用此构建目标:
FROM microsoft/dotnet:latest AS build-env

最初的错误消失了,但是在相同的构建步骤中出现了新的问题:
Step 1/10 : FROM microsoft/dotnet:latest AS build-env
latest: Pulling from microsoft/dotnet
Digest: sha256:580c65dd8bbbd75ba0ee74fff146cb44901f9be0ef233cd9d1399e1f9a8cfb11
Status: Downloaded newer image for microsoft/dotnet:latest
---> ae53eff0f099
Step 2/10 : WORKDIR /app
---> Using cache
---> 53551996e135
Step 3/10 : COPY *.csproj ./
---> Using cache
---> 1729e42c4ef1
Step 4/10 : RUN dotnet restore
---> Running in 6b3f62681fc6
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Core.Model/MyCompany.Core.Model.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Core.Contract/MyCompany.Core.Contract.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Core.Service/MyCompany.Core.Service.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Core.ViewModel/MyCompany.Core.ViewModel.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Core/MyCompany.Core.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Data.Contract/MyCompany.Data.Contract.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Data.Model/MyCompany.Data.Model.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(895,5): warning MSB3202: The project file "/MyCompany.Data/MyCompany.Data.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Core.Model/MyCompany.Core.Model.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Core.Contract/MyCompany.Core.Contract.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Core.Service/MyCompany.Core.Service.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Core.ViewModel/MyCompany.Core.ViewModel.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Core/MyCompany.Core.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Data.Contract/MyCompany.Data.Contract.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Data.Model/MyCompany.Data.Model.csproj" was not found. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(986,5): warning MSB3202: The project file "/MyCompany.Data/MyCompany.Data.csproj" was not found. [/app/MyCompany.csproj]
Restoring packages for /app/MyCompany.csproj...
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(104,5): error : An error occurred while retrieving package metadata for 'System.Security.Principal.Windows.4.3.0' from source '/usr/share/dotnet/sdk/NuGetFallbackFolder'. [/app/MyCompany.csproj]
/usr/share/dotnet/sdk/2.1.101/NuGet.targets(104,5): error : Invalid character in the given encoding. Line 1, position 1. [/app/MyCompany.csproj]
Restoring packages for /app/MyCompany.csproj...
The command '/bin/sh -c dotnet restore' returned a non-zero code: 1

最佳答案

我的公司生产环境中出现此错误。与安装的.Net Core的多个版本和不匹配的.Net Standard版本有关。

由于您使用的是正确版本,因此在您的计算机中它可以正常工作,因为在安装.Net Core时,会将最新版本设置为默认版本。

但是在您的解决方案中,它指向另一个软件包版本。解决方法是:

  • 转到部署文件夹
  • 使用以下命令打开 System.Security.Cryptography.Primitives.dll
    dotpeek这样的工具
    enter image description here
  • 在您的web.config中使用 bindredirect 指向正确的 newVersion
    <dependentAssembly>
    <assemblyIdentity name="System.Security.Cryptography.Primitives" publicKeyToken="B03F5F7F11D50A3A" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-4.3.0.0" newVersion="4.0.x.x"/>
    </dependentAssembly>

  • 您还可以将解决方案中的每个软件包更新为与您的Core版本匹配的.Net Standard版本。

    关于docker - Docker中的.NET Core 2.0 Identity Server + MVC-在MacOS上构建失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49374491/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com