我的 Visual Studio 2019 WPF 应用程序在应该是 exe 时将 dll 设置为输出

Posted

技术标签:

【中文标题】我的 Visual Studio 2019 WPF 应用程序在应该是 exe 时将 dll 设置为输出【英文标题】:My Visual Studio 2019 WPF app is setting a dll as the output when it should be an exe 【发布时间】:2020-02-24 07:48:48 【问题描述】:

这是我第一次尝试制作可部署的程序。在创建了一个运行良好的小型 WPF XAML 应用程序(即我可以在 bin 文件夹中运行可执行文件)之后,我试图将它包装在一个安装程序中。

在遵循 WiX 和“Microsoft Visual Studio 安装程序项目”的多个在线指导后。两者都制作安装程序包,但是当我针对“主要输出”时,它们仅针对 WPF XAML 输出中的 dll 文件。这似乎源于 WPF 项目的构建。

如何调整构建过程的主要输出,使其包含在安装程序中?

将 dll 指定为输出文件的构建输出屏幕截图:

添加更多细节:

这可能是一个wpf(.net core) 应用程序而不是一个wpf(.net framework)。查看 Elton 截图中的输出窗口,我们可以发现输出是 xx.dll 而不是 xx.exe。

如果我们在此解决方案中创建一个Installer项目,右键单击Installer项目=>添加=>项目输出=>主输出以包含安装程序项目中的WPF输出,只有xx.dll被认为是wpf的输出,但不是xx.exe。

所以在VS中建立Installer项目后,双击setup.exe(installer project's output),wpf.exe没有安装好。

【问题讨论】:

您的安装程序是如何设置的?你没有任何相关信息。查看How to Ask 并包含minimal reproducible example。 你是如何设置“主输出”的?在我的测试中,没有“只针对dll文件”的情况。有详细信息吗? 安装项目非常简单。网站codeteddy.com/2016/04/04/… 是如何设置的,WiX 尝试遵循wixtoolset.org/documentation/manual/v3/votive/… @KyleWang 我没有设置主要输出。它根本不是抓取 exe。查看项目的构建输出,它将 dll 设置为主要输出。因此,我认为这不是设置项目问题,而是主项目构建的问题。抱歉,如果关于设置的讨论导致讨论误入歧途,但我想将其作为最终目标的背景以及我首先遇到此问题的原因。 【参考方案1】:

Lance 的回答之上。您可以将发布项目添加到主主要输出附近的输出中。

1- 右键单击​​项目并选择Add => Project Output。 2- 选择您的目标项目,然后从您的配置列表中选择 Publish Items。 3- 现在您的 应用程序文件夹 中有另一个 输出

完成。每次批量构建,您都会将发布目录复制到应用程序文件夹。

【讨论】:

这应该是公认的答案,似乎是一个实际的解决方案,而不是解决方法 “右键单击项目并选择添加 => 项目输出”上下文菜单有项目参考...没有“项目输出”[VS2019 16.8.5] 我同意,这应该是公认的答案 我会在我的项目上做一个注释,以便下次我打开它进行修改时尝试这个。这是一个非常简单的代码,但我知道我的待办事项中已经存在一个小的改进问题。一旦(阅读“如果”)我清除了优先级更高的任务以解决小问题,我一定会尝试一下并相应地更新接受的答案。 这似乎包括 PDB 文件。有没有简单的方法可以排除?【参考方案2】:

我的 Visual Studio 2019 WPF 应用程序将 dll 设置为输出时 应该是一个exe。

我确定您使用的是 WPF(.net core) 项目,因为昨天我碰巧在我的机器上重现了同样的情况。至于问题的原因,如果您对此感兴趣,可以向this issue 寻求帮助。对于.net core 2.2 和更早的版本,如果我们构建一个控制台(.net core) 项目,我们将得到一个xx.dll 作为默认输出(使用dotnet xx.dll 运行它)。

但是对于.net core 3.0,我发现这种情况发生了变化。现在,如果我们构建一个 Console(.net core) 或 WPF(.net core),除了xx.dll,我们现在还会得到一个xx.exe。而且我检查了Installer Project的更新日期和WPF(.net core)的发布日期,Installer项目的最新更新比WPF(.net core)的发布要早很多,我猜可能是这个原因?我不确定 Installer Project 如何识别一个 WPF 项目的输出,但我建议您可以将此问题发布到 DC forum ,如果获得足够的票数,团队将考虑修复。

以下是我的解决方法,可能会有所帮助:

1.使用Add=>File代替Add=>Primary Output

在发布模式下构建 WPF 项目,导航到输出路径并复制该路径。然后右键单击Installer project=>Add=>Files 以输入该路径。选择输出文件夹中的所有文件并点击打开:

右键单击程序集文件并选择在编辑器中查找:

右击xx.exe=>创建快捷方式。然后将快捷方式移动到User's Desktop folder 并将AlwaysCreate 属性设置为true

之后,构建安装程序项目并在我的机器上安装那个 xx.msi 或 setup.exe,我会在桌面上获得一个快捷方式,双击它将运行 wpf(core) 应用程序。

2.参见this blog,我们可以使用dotnet publish -r xxx -p:PublishSingleFile=true 之类的命令来获取一个单文件可执行文件,该可执行文件是自解压的,包含运行您的应用程序所需的所有依赖项(包括本机)。在这种情况下,您不需要 Installer project 来部署您的项目。单个可执行文件就足够了。来自this issue中Lex Li的提示。

希望对你有帮助:-)

【讨论】:

那个单文件出版太棒了。这段代码是为车间的技术人员准备的,所以“将这个 exe 拖到你想要的地方”的解决方案将解决许多令人头疼的维护问题。我在 .csproj 文件中使用了标签版本,添加了 win-x64true。然后就像构建一样简单,然后右键单击项目并单击发布。 很高兴知道它有帮助:)

以上是关于我的 Visual Studio 2019 WPF 应用程序在应该是 exe 时将 dll 设置为输出的主要内容,如果未能解决你的问题,请参考以下文章

轻松进行WPF界面开发,Visual Studio 2019主题和新的默认主题

轻松进行WPF界面开发,Visual Studio 2019主题和新的默认主题

Visual Studio 2019 CPU占用率过高的问题WPF xaml 设计器卡顿

译Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

译Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

visual studio 2013 wpf 添加窗口加载和关闭函数