【发布时间】:2021-08-16 19:00:35
【问题描述】:
我有两个 C# .NET 5 项目,我们称它们为 A 和 B。它们都是可执行文件(不是 DLL)。项目 A 引用项目 B。我想将项目 A 发布为一个独立的可执行文件(尽管不是单个文件,如果这很重要)。我正在使用这个命令来启动发布过程:
dotnet publish A.csproj -c Release --self-contained -r win-x64 /p:PublishTrimmed=true /p:PublishReadyToRun=true
但是,这会在尝试构建项目 B 时产生以下错误(这是必需的,因为项目 A 引用了它):
error NETSDK1031: It is not supported to build or publish a self-contained application without specifying a RuntimeIdentifier. You must either specify a RuntimeIdentifier or set SelfContained to false.
但正如您所见,我 am(我认为?)使用 -r win-x64 指定运行时标识符。我猜我在命令行上指定的运行时标识符在构建项目 B 时没有通过。如何在不禁用 SelfContained 的情况下解决此问题?
我的 dotnet 版本是:
dotnet --version
5.0.400
编辑:我不想将<RuntimeIdentifier>win-x64</RuntimeIdentifier> 放在我的项目文件中,因为我需要为多个不同的运行时进行构建,并且我希望能够通过命令行进行控制。
【问题讨论】:
-
内部 .NET .exe 具有与 DLL 相同的格式,带有一些本机引导代码和入口点。他们提升和改进了 Java 的一个概念。 |编译它不需要 DLL - 甚至不需要框架 - 是 .NET Native 所做的,我认为:stackoverflow.com/a/45710/3346583
-
@Christopher 对不起,我不明白你的意思。
-
我认为如果不以某种方式破解 msbuild,您将无法做到这一点。但我认为这只是架构的问题。为什么不在两个可执行项目之间提取共享库?这是支持的,官方的方式来做到这一点。我似乎找不到任何缺点。图书馆就是图书馆,应用就是应用。依赖另一个应用程序看起来很hacky
-
我理解你希望你的项目是“自包含的”,在“没有外部依赖”的意义上。但是......你绝对确定你需要
--self-contained吗?建议:尝试不使用。看看是否能解决问题;验证您的应用是否正常运行。 -
@Christopher 提取共享库需要几天的工作。长期以来一直支持引用其他 EXE 的 EXE。