c# - WPF ClickOnce 遗漏引用

标签 c# .net wpf visual-studio clickonce

我有一个与本地 SQLite 和 Entity Framework Core 配合使用的 WPF 应用程序。我想使用 ClickOnce 分发我的应用程序。

当我使用 Visual Studio 2017 运行它时一切正常。但是当我使用 ClickOnce 时应用程序在启动时崩溃。崩溃太早了,所以我什至无法记录异常。一段时间后,我发现发布文件夹中缺少一些 dll。例如 System.Runtime。所有引用都是 NuGet 包。然后我发现尽管我在我的项目 ClickOnce 应用程序文件列表中引用了 dll,但不包含它。

目前我找到的唯一解决方案是将丢失的 dll 作为文件添加到我的项目的根目录中,并将构建操作设置为 Content。在 ClickOnce 应用程序文件对话框中,我将发布状态设置为包含。

它现在可以工作,但看起来不是最好的方法。问题是为什么他们首先被错过了。更有可能是我遗漏了什么,或者我不了解问题的根源。

更新:

您可以找到示例代码 here .

它可以在 Visual Studio 中运行,但当您尝试将其安装为 ClickOnce 应用程序时,它会在启动时崩溃。

UPD:问题已在 Visual Studio Professional 版本 15.6.1 中修复

最佳答案

解决这个问题有两种方法

首先,你必须去PropertiesPublishApplication Files,在这个地方,制作你的DLL文件包含在你的项目中

This place

但如果它不起作用,请转至 References 并使 DLL 文件 CopyLocal = False。您在项目中添加一个 DLL 文件,如 Existing Item 并使它们Copy Always

DLL file and copy always

它将正常工作。

但是对于您的示例,我看了这个并解决了它。看这张图片:

Enter image description here

您有四个 DLL 文件。你需要为他们做这件事:

System.Diagnostics.Tracing.dll
System.Reflection.dll
System.Runtime.dll
System.Runtime.Extensions.dll

首先转到您的引用并使它们Copy Local False:

Enter image description here

然后到每个DLL文件的路径下,像Existing Item一样添加,然后全部Copy To Output Directory CopyAlways

Enter image description here

然后发布它并像这张图片中那样运行它。我从发布文件运行它并且它有效。

关于c# - WPF ClickOnce 遗漏引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43756396/

相关文章:

c# - 错误 : The process cannot access the file 'Companion.jpg' because it is being used by another process

c# - 当 UserControl 没有边框样式时,如何在设计 View 中突出显示 UserControl 使用的区域?

c# - 许多 else 和 if 语句?

c# - 将 IoC 容器配置放在 Service Fabric 服务中的何处?

c# - Youtube Live API - 使用 OAuth 拒绝广播权限

c# - 如何在 C# 中使用 AD 组名称查找 Active Directory 组电子邮件地址

.net - 读取大文本文件直到某个字符串

c# - WPF caliburn屏幕和选项卡控件

wpf - 从代码隐藏设置 ContentControls 内容属性会引发异常 'value does not fall in range'

wpf - 从键盘禁用整个用户控制聚焦