我有一个适用于本地SQLite和Entity Framework Core的WPF应用程序。我想使用ClickOnce分发我的应用程序。
当我使用Visual Studio 2017运行时,一切正常。但是当我使用ClickOnce时,应用程序在启动时崩溃了。崩溃是如此早,所以我甚至无法记录异常。过了一段时间后,我发现在发布文件夹中有些dll被遗漏了。例如System.Runtime。所有引用都是NuGet包。然后我发现,尽管我的项目中有一个dll参考,但ClickOnce应用程序文件列表并不包含它。
我现在找到的唯一解决方案是将错过的dll添加为项目根目录中的文件,并将构建操作设置为Content。在ClickOnce应用程序文件对话框中,我将发布状态设置为包含。
它现在有效,但看起来不是最好的方法。问题是为什么他们首先被遗漏。我更有可能错过了一些东西,或者我不明白问题的根源。
UPD:
您可以找到示例代码here。
它可以在Visual Studio中运行,但在您尝试将其安装为ClickOnce应用程序时会崩溃。
UPD:问题已在Visual Studio Professional 15.6.1版本中修复
答案 0 :(得分:2)
有两种解决方法。
首先你必须去属性>发布>应用程序文件并在此处使您的dll在项目中包含
但是如果不起作用,请转到参考并使dll CopyLocal = False ,在项目中添加dll 就像存在的项目,并使它们始终复制强>
它会正常工作
但是对于你的样品我看了这个并且我解决了它 看这个图像:
你有4个dll需要为他们做这个
System.Diagnostics.Tracing.dll
System.Reflection.dll
System.Runtime.dll
System.Runtime.Extensions.dll
首先进入你的参考并使它们复制本地错误
瘦到每个dll的路径并像Exist Item一样添加它们然后使它们全部复制到输出Directoey CopyAlways
然后发布并运行它就像这张图片我从发布文件及其工作中运行它
答案 1 :(得分:0)
即使您将dll设置为本地复制,除非您在代码中实际使用dll,否则不会复制dll。您可以尝试在代码中添加System.Runtime吗?
var dummytest = System.Runtime.GCSettings.IsServerGC;
答案 2 :(得分:0)
基于https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/的问题9,我能够做到以下几点:
引用Microsoft.Bcl
或Microsoft.Bcl.Async
软件包的针对.NET Framework 4.0的ClickOnce应用程序在安装后可能会遇到TypeLoadException
或其他错误。
这是因为ClickOnce无法部署某些必需的程序集。要解决此问题,请执行以下操作: