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