为啥我通过安装项目而不是 EXE 安装 DLL 以及如何修复它?

Posted

技术标签:

【中文标题】为啥我通过安装项目而不是 EXE 安装 DLL 以及如何修复它?【英文标题】:Why I get a DLL installed by the setup project instead of an EXE and how to fix it?为什么我通过安装项目而不是 EXE 安装 DLL 以及如何修复它? 【发布时间】:2021-08-03 20:52:10 【问题描述】:

我创建了一个新的 C# 项目 WPF 应用程序 - .NET Core WPF 应用程序的项目。 框架:.NET Core 3.1。

项目已加载。 (你有一个空表格) 右键单击您的项目并检查您是否具有“输出类型”Windows 应用程序。 (这意味着当您单击构建时,它会在项目的 BIN 文件夹中创建一个 EXE 文件) 然后在解决方案中添加一个新项目:Setup Wizard 扩展名为 Microsoft Visual Studio 安装程序项目。然后按照此处的步骤操作 -> https://***.com/a/6090929/15917420

最后它将DLL打包成安装程序文件而不是EXE。

因此,如果您使用 setup.exe 并安装它,它会安装 DLL。 你有同样的问题还是我错过了什么?

如果我使用 .NET Framework 创建 WPF,我没有这个问题。

谢谢

编辑:录制的视频:https://drive.google.com/file/d/11ElC0F62klxQOI-beOn6LhcZbyOb7QDT/view?usp=sharing

【问题讨论】:

安装项目中创建并包含的exe的名称是什么,安装的dll名称是什么,添加到安装项目中的对象的属性是什么?如果你创建一个 exe 并添加它,我不明白你得到的是一个 dll ...... @OlivierRogier 用空表单创建简单项目没关系。 【参考方案1】:

我有同样的问题。微软发布了这个: https://docs.microsoft.com/en-us/visualstudio/deployment/installer-projects-net-core?view=vs-2019

基本上是说对于 .NET Core 项目,在构建安装项目时,您必须使用“已发布项目”而不是“主要输出”。它还有一些其他的提示。

【讨论】:

您已至少发布了四次此答案:***.com/a/69301507/10871073***.com/a/69301592/10871073***.com/a/69301729/10871073。 是的,因为答案适用于所有四个问题。不知道我可以用我有限的功能做些什么。【参考方案2】:

以 .NET Core 为目标时,“主”项目(即应用程序)获取两个文件,一个 dll 一个 exe 文件。 exe文件只是一个存根加载器,它定位dotnet运行时并将控制权转移到相应的dll。简单来说,一个.NET core项目的exe就是执行dotnet <dll-with-the-same-name>-command。

考虑到这一点,您需要确保安装程序同时安装 dll 和 exe(以及任何其他类似名称的文件,例如 <Application>.deps.json)。

【讨论】:

以上是关于为啥我通过安装项目而不是 EXE 安装 DLL 以及如何修复它?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法预先测试Windows exe是不是因为缺少dll而无法加载?

WiX:如何打包 exe 或 dll 以仅在安装期间使用

为啥 javaw 加载文件而不是 eclipse.exe?

如何将dll文件放在其他目录下而不是exe所在

如何在系统路径之外使用 dll

如何获取最新的 JRE / JDK 作为 zip 文件而不是 EXE 或 MSI 安装程序? [关闭]