gpt4 book ai didi

c# - "dotnet publish"在 Mac 上创建一个 .dll,但在 Linux 上生成一个可执行文件?

转载 作者:行者123 更新时间:2023-12-02 18:55:15 25 4
gpt4 key购买 nike

当我运行 dotnet publish在使用我的 Mac 的控制台应用程序上,结果是 .dllbin/Debug/<framework>/publish目录。

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

为什么不同?为什么不 dotnet publish在 macOS 上生成可执行二进制文件?

我已经使用 .NET Core 3.1 和 .NET 5.0 进行了尝试,并得到了相同的结果。这是我的 .NET 5.0 过程:

首先,我运行了 dotnet new console从头开始生成一个新项目。我在生成的输出中没有做任何更改。生成的 .csproj看起来像这样:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
<RootNamespace>MyApp</RootNamespace>
</PropertyGroup>

</Project>

正在运行 dotnet publish来自 macOS 的结果如下:

$ dotnet publish
Microsoft (R) Build Engine version 16.8.3+39993bd9d for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

Determining projects to restore...
Restored /src/my-app.csproj (in 68 ms).
my-app -> /src/bin/Debug/net5.0/my-app.dll
my-app -> /src/bin/Debug/net5.0/publish/

$ ls -al bin/Debug/net5.0/publish/
total 56
drwxr-xr-x 6 user staff 192B Feb 17 09:49 ./
drwxr-xr-x 9 user staff 288B Feb 17 09:49 ../
-rw-r--r-- 1 user staff 409B Feb 17 09:49 my-app.deps.json
-rw-r--r-- 1 user staff 4.5K Feb 17 09:49 my-app.dll
-rw-r--r-- 1 user staff 9.2K Feb 17 09:49 my-app.pdb
-rw-r--r-- 1 user staff 139B Feb 17 09:49 my-app.runtimeconfig.json

正在运行 dotnet publish从 Docker 容器内部产生以下内容:

$ 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 version 16.8.3+39993bd9d for .NET
Copyright (C) Microsoft Corporation. All rights reserved.

Determining projects to restore...
Restored /src/my-app.csproj (in 99 ms).
my-app -> /src/bin/Debug/net5.0/my-app.dll
my-app -> /src/bin/Debug/net5.0/publish/

root@d143004612a8:/src# ls -al bin/Debug/net5.0/publish/
total 164
drwxr-xr-x 7 root root 224 Feb 17 16:53 .
drwxr-xr-x 10 root root 320 Feb 17 16:53 ..
-rwxr-xr-x 1 root root 138736 Feb 17 16:53 my-app
-rw-r--r-- 1 root root 409 Feb 17 16:53 my-app.deps.json
-rw-r--r-- 1 root root 4608 Feb 17 16:53 my-app.dll
-rw-r--r-- 1 root root 9304 Feb 17 16:53 my-app.pdb
-rw-r--r-- 1 root root 139 Feb 17 16:53 my-app.runtimeconfig.json

所以我的问题是:对于同一个项目,为什么一个输出可执行二进制文件,而另一个不输出?

最佳答案

由于 macOS 公证要求,app host executable generation is turned off by default on macOS

您可以通过将 UseAppHost 属性设置为 True 作为构建属性 -p:UseAppHost=True 或在csproj 文件:

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

关于c# - "dotnet publish"在 Mac 上创建一个 .dll,但在 Linux 上生成一个可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66246512/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com