gpt4 book ai didi

docker - dotnetcoresdk 容器中的 "dotnet publish"命令生成没有详细信息的 EXE

转载 作者:行者123 更新时间:2023-12-02 17:59:59 25 4
gpt4 key购买 nike

我们正在尝试使用 dotnet publish 在容器内构建 .NET Core 3.1 应用程序, dotnet builddotnet msbuild命令,具有不同的参数。哪个成功了,但问题是 EXE 输出从不显示任何文件详细信息(版权、文件版本等为空),而 DLL 确实包含指定的信息。我们已经尝试了几种不同的容器,以及在线研究和尝试不同的命令参数,用于版本控制(有一些)。此外,直接在我的 Windows 10 机器上运行相同的 dotnet publish 命令,按预期工作,没有问题。
我也尝试分离 dotnet builddotnet publish ( --no-build ) 命令并在中间复制代码签名的 EXE,以防出现信任问题,但没有任何效果。
Dockerfile 内容(也使用 dotnet publish 而不是 msbuild ):

FROM mcr.microsoft.com/dotnet/core/sdk:3.1-alpine3.11

ARG Version="5.6.7"

WORKDIR /build

COPY ./src $WORKDIR

RUN dotnet restore

RUN echo $Version

RUN dotnet msbuild abc.csproj /t:Build /p:PublishSingleFile=True /p:SelfContained=True /p:PublishProtocol=FileSystem /p:Configuration=Release /p:Platform=x64 /p:TargetFrameworks=netcoreapp3.1 /p:PublishDir=publish /p:RuntimeIdentifier=win-x64 /p:PublishReadyToRun=False /p:PublishTrimmed=False /p:VersionNumber=$Version /p:VersionPrefix=$Version /p:Version=$Version /p:AssemblyVersion=$Version /p:AssemblyVersionAttribute=$Version /p:FileVersion=$Version /p:AssemblyFileVersionAttribute=$Version
重现步骤:
  • 创建 Dockerfile,类似上面
  • 为 .NET Core 控制台应用程序运行 docker build 命令(替换 abc.csproj)
  • 使用容器 ID
  • 运行 docker run 命令
  • 将发布内容复制到本地文件系统并查看 EXE 文件详细信息
  • 最佳答案

    此处描述了此问题:https://github.com/dotnet/sdk/issues/4127 .从该链接:

    The PE resources are transferred from App.dll to the host App.exe onlywhen building on Windows -- because the resource handling codecurrently uses native Win32 API. So, when the app is published fromLinux or nanoserver, the resources are not transfered.


    该问题已关闭,指向计划的跨平台工作以重写这些资源的写入方式( https://github.com/dotnet/runtime/issues/3828 )。这项工作已被推迟到 dotnet 6.0.0 里程碑,因此不幸的是,目前让 .exe 包含这些程序集信息资源的唯一方法是运行 dotnet publish命令直接在 Windows 主机上。

    关于docker - dotnetcoresdk 容器中的 "dotnet publish"命令生成没有详细信息的 EXE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63585268/

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