C# Mac上的“dotnet publish”创建了一个.dll,但Linux上生成了一个可执行文件?

C# Mac上的“dotnet publish”创建了一个.dll,但Linux上生成了一个可执行文件?,c#,.net,.net-core,C#,.net,.net Core,当我使用Mac在控制台应用程序上运行dotnet publish时,结果是bin/Debug//publish目录中的.dll 当我使用Microsoft.NET SDK Docker容器在相同的源代码上运行相同的命令时,除了.dll之外,结果是一个可执行的二进制文件 为什么不同?为什么dotnetpublish不能在macOS上生成可执行的二进制文件 我曾使用.NETCore3.1和.NET5.0尝试过这个方法,得到了相同的结果。以下是我的.NET 5.0过程: 首先,我运行dotnetnew

当我使用Mac在控制台应用程序上运行dotnet publish时,结果是bin/Debug//publish目录中的.dll

当我使用Microsoft.NET SDK Docker容器在相同的源代码上运行相同的命令时,除了.dll之外,结果是一个可执行的二进制文件

为什么不同?为什么dotnetpublish不能在macOS上生成可执行的二进制文件

我曾使用.NETCore3.1和.NET5.0尝试过这个方法,得到了相同的结果。以下是我的.NET 5.0过程:

首先,我运行dotnetnewconsole从头开始生成一个新项目。我在生成的输出中没有更改任何内容。生成的.csproj如下所示:

Exe net5.0 MyApp 从macOS运行dotnet publish会产生以下结果:

$dotnet发布 Microsoft R Build Engine版本16.8.3+39993bd9d for.NET 微软公司版权所有。版权所有。 正在确定要恢复的项目。。。 68毫秒内恢复/src/my-app.csproj。 我的应用->/src/bin/Debug/net5.0/my-app.dll 我的应用程序->/src/bin/Debug/net5.0/publish/ $ls-al-bin/Debug/net5.0/publish/ 总数56 drwxr-xr-x 6用户工作人员192B 2月17日09:49/ drwxr-xr-x 9用户工作人员288B二月17日09:49/ -rw-r-r-1用户职员409B二月17日09:49 my-app.deps.json -rw-r-r-1用户员工4.5K二月17日09:49 my-app.dll -rw-r-r-1用户员工9.2K二月17日09:49 my-app.pdb -rw-r-r-1用户职员139B二月17日09:49 my-app.runtimeconfig.json 从Docker容器中运行dotnet publish会产生以下结果:

$docker run-it-mount src=$pwd,target=/src,type=bind mcr.microsoft.com/dotnet/sdk:5.0 root@d143004612a8:/src dotnet publish Microsoft R Build Engine版本16.8.3+39993bd9d for.NET 微软公司版权所有。版权所有。 正在确定要恢复的项目。。。 在99毫秒内恢复/src/my-app.csproj。 我的应用->/src/bin/Debug/net5.0/my-app.dll 我的应用程序->/src/bin/Debug/net5.0/publish/ root@d143004612a8:/src ls-al-bin/Debug/net5.0/publish/ 总数164 drwxr-xr-x 7根根目录224 Feb 17 16:53。 drwxr-xr-x 10根根目录320二月17日16:53。。 -rwxr-xr-x 1根根目录138736二月17日16:53我的应用程序 -rw-r-r-1 root根409 Feb 17 16:53 my-app.deps.json -rw-r-r-1根根根4608 Feb 17 16:53 my-app.dll -rw-r-r-1根根根9304二月17日16:53 my-app.pdb -rw-r-r-1根根目录139 Feb 17 16:53 my-app.runtimeconfig.json
所以我的问题是:为什么在同一个项目中,一个输出可执行二进制文件,而另一个不输出?

由于macOS公证要求

通过将UseAppHost属性设置为True(作为生成属性-p:UseAppHost=True)或在csproj文件中,您可以手动覆盖该属性:

<PropertyGroup>
  <UseAppHost>True</UseAppHost>
</PropertyGroup>

为了完整性起见,还有第三种选择:当您发布自己的应用程序时,始终会创建一个appHost。说明和文档链接很有意义。非常感谢。