我有一个适用于本地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版中修复
有两种方法可以解决这个问题。
首先你必须去属性>发布>应用程序文件,在这个地方让你的dll包含在你的项目中
但如果它不起作用去参考并使dll复制本地=假,你在项目中添加像存在项目的dll并使它们复制总是
它会正常工作
但对于你的样品我看这个,我解决了它看这个图像:
你有4个dll需要为他们做这个
System.Diagnostics.Tracing.dll
System.Reflection.dll
System.Runtime.dll
System.Runtime.Extensions.dll
首先去你的参考,并使他们复制本地错误
thin转到每个dll的路径并像Exist Item一样添加它们然后将它们全部复制到输出Directoey CopyAlways
然后发布并运行它像这张图片我运行它从发布文件及其工作
即使您将dll设置为本地复制,除非您在代码中实际使用dll,否则不会复制dll。您可以尝试在代码中添加System.Runtime吗?
var dummytest = System.Runtime.GCSettings.IsServerGC;
基于https://blogs.msdn.microsoft.com/bclteam/p/asynctargetingpackkb/的第9期,我能够做到以下几点:
针对引用Microsoft.Bcl
或Microsoft.Bcl.Async
软件包的.NET Framework 4.0的ClickOnce应用程序在安装后可能会遇到TypeLoadException
或其他错误。
发生这种情况是因为ClickOnce无法部署某些必需的程序集。要解决此问题,请执行以下操作: