当我发布dotnet时,如何更改dll名称



除了最后一行之外,我的所有.net核心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等(

如文档所示:

您可以使用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"]

除了@gcamp806的答案:当在参数之间使用;时,我无法在Windows 10下运行命令。相反,我不得不使用一个普通的逗号:,

我发布一个自包含的可执行文件的命令现在看起来是这样的:

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

最新更新