dotnet发布时如何更改dll名称?

问题描述 投票:0回答:4

除了最后一行之外,我的所有 .net core dockerfile 都 99% 相同:

ENTRYPOINT ["dotnet", "<APP NAME HERE>.dll"]

我似乎很愚蠢,因为否则它们可能都是相同的

有没有办法使用

dotnet publish -c Release -o out
命令更改 dll 名称?我可以在不修改 csproj 文件或其他任何内容的情况下做到这一点吗?

c# docker .net-core dockerfile .net-3.0
4个回答
8
投票

您可以使用此命令来执行构建并重命名程序集:

dotnet msbuild -r -p:Configuration=Release;AssemblyName=foo

在 Linux/macOS 上,您必须在命令周围添加引号,如下所示:

dotnet msbuild -r '-p:Configuration=Release;AssemblyName=foo'

但是,由于设置了全局属性,可能会产生意想不到的副作用。您应该阅读 2019 年 9 月的这个未解决问题,因为它直接回答了您有关 Docker 和重命名输出的问题:https://github.com/dotnet/msbuild/issues/4696

另外,我知道您想避免编辑 .csproj 文件,但如果您不知道,您可以添加

AssemblyName
属性并以这种方式设置输出名称。

如:

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <AssemblyName>foo</AssemblyName>
  </PropertyGroup>

这将创建

foo.dll
(以及其他文件,例如
.pdb
.deps.json
等)


0
投票

正如文档所示:

您可以使用 docker run --entrypoint 标志覆盖 ENTRYPOINT 指令。

命令看起来像这样:

docker run --entrypoint dotnet YOUR_IMAGE "<APP NAME HERE>.dll"

正如另一个有用的文档所建议的那样,您还可以将参数传递给

docker run
命令末尾的入口点,如下所示:

docker run YOUR_IMAGE "<APP NAME HERE>.dll"

这还要求您将

ENTRYPOINT
更改为:

ENTRYPOINT ["dotnet"]

0
投票

除了 @gcamp806 的回答:在参数之间使用

;
时,我无法让命令在 Windows 10 下运行。相反,我不得不使用普通的逗号:
,

我发布独立可执行文件的命令现在如下所示:

dotnet publish -r win-x64 /p:Configuration=Release,PublishSingleFile=true,IncludeNativeLibrariesForSelfExtract=true,AssemblyName=appname --self-contained --output ./releases/windows/v1

0
投票

我目前正在使用

ARG SERVICE_NAME
RUN ln -s "${SERVICE_NAME}.dll" docker_service_name.dll
ENTRYPOINT [ "dotnet", "docker_service_name.dll" ]

到目前为止,它还没有造成任何问题,当我谷歌时我找不到任何问题 - 最近我遇到的是一些老问题,人们通过Windows上的快捷方式运行 dotnet 可执行文件,这不是我的基础层,所以我好的。到目前为止。

© www.soinside.com 2019 - 2024. All rights reserved.