WPF ClickOnce错过了参考资料

问题描述 投票:2回答:3

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

当我使用Visual Studio 2017运行它时,一切正常。但是当我使用ClickOnce时,app开始崩溃。崩溃是如此早,所以我甚至无法记录异常。过了一段时间后,我发现在发布文件夹中有些dll被遗漏了。例如System.Runtime。所有引用都是NuGet包。然后我发现,尽管我在项目中引用了dll,但ClickOnce应用程序文件列表并不包含它。

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

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

UPD:

你可以找到一个示例代码here

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

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

c# .net wpf visual-studio clickonce
3个回答
2
投票

有两种方法可以解决这个问题。

首先你必须去属性>发布>应用程序文件,在这个地方让你的dll包含在你的项目中this Place

但如果它不起作用去参考并使dll复制本地=假,你在项目中添加像存在项目的dll并使它们复制总是

dll and copy allways

它会正常工作

但对于你的样品我看这个,我解决了它看这个图像:

enter image description here

你有4个dll需要为他们做这个

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

首先去你的参考,并使他们复制本地错误

enter image description here

thin转到每个dll的路径并像Exist Item一样添加它们然后将它们全部复制到输出Directoey CopyAlways

enter image description here

然后发布并运行它像这张图片我运行它从发布文件及其工作


0
投票

即使您将dll设置为本地复制,除非您在代码中实际使用dll,否则不会复制dll。您可以尝试在代码中添加System.Runtime吗?

     var dummytest = System.Runtime.GCSettings.IsServerGC;

0
投票

基于https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/的第9期,我能够做到以下几点:

Symptom

针对引用Microsoft.BclMicrosoft.Bcl.Async软件包的.NET Framework 4.0的ClickOnce应用程序在安装后可能会遇到TypeLoadException或其他错误。

Resolution

发生这种情况是因为ClickOnce无法部署某些必需的程序集。要解决此问题,请执行以下操作:

  1. 右键单击该项目,然后选择“添加现有项”
  2. 浏览到System.Runtime.dll所在的文件夹
  3. 在文件名文本框中粘贴文件的路径
  4. 单击“添加”按钮旁边的向下箭头,然后选择“添加为链接”
  5. 在Solution Explorer中,按住CTRL选择System.Runtime.dll
  6. 右键单击选择,选择“属性”,然后将“复制到输出目录”更改为“始终复制”
  7. 重新发布
© www.soinside.com 2019 - 2024. All rights reserved.