我们正在尝试在容器中构建一个 .NET core 3.1 应用程序,使用具有不同参数的dotnet publish
或dotnet build
命令。dotnet msbuild
成功了,但问题是 EXE 输出从不显示任何文件详细信息(版权、文件版本等为空),而 DLL 确实包含指定的信息。我们尝试了几种不同的容器,以及在线研究并尝试了不同的命令参数,用于版本控制(有一些)。此外,直接在我的 Windows 10 机器上运行相同的 dotnet publish 命令,按预期工作,没有问题。
我还尝试分离dotnet build
和dotnet 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 文件详细信息