除了最后一行之外,我的所有 .net core dockerfile 都 99% 相同:
ENTRYPOINT ["dotnet", "<APP NAME HERE>.dll"]
我似乎很愚蠢,因为否则它们可能都是相同的
有没有办法使用
dotnet publish -c Release -o out
命令更改 dll 名称?我可以在不修改 csproj 文件或其他任何内容的情况下做到这一点吗?
您可以使用此命令来执行构建并重命名程序集:
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
等)
除了 @gcamp806 的回答:在参数之间使用
;
时,我无法让命令在 Windows 10 下运行。相反,我不得不使用普通的逗号:,
我发布独立可执行文件的命令现在如下所示:
dotnet publish -r win-x64 /p:Configuration=Release,PublishSingleFile=true,IncludeNativeLibrariesForSelfExtract=true,AssemblyName=appname --self-contained --output ./releases/windows/v1
我目前正在使用
ARG SERVICE_NAME
RUN ln -s "${SERVICE_NAME}.dll" docker_service_name.dll
ENTRYPOINT [ "dotnet", "docker_service_name.dll" ]
到目前为止,它还没有造成任何问题,当我谷歌时我找不到任何问题 - 最近我遇到的是一些老问题,人们通过Windows上的快捷方式运行 dotnet 可执行文件,这不是我的基础层,所以我好的。到目前为止。