WPF .NET Core 3.1 应用程序发布单个文件(发布)失败

Posted

技术标签:

【中文标题】WPF .NET Core 3.1 应用程序发布单个文件(发布)失败【英文标题】:Publish Single File (Release) fails for WPF .NET Core 3.1 application 【发布时间】:2020-04-08 23:36:49 【问题描述】:

我正在尝试使用针对 win-x86 的发布单个文件发布针对 .NET Core 3.1 的 WPF 应用程序(到文件夹)。应用程序可以正常发布调试,但发布失败。如果我取消选择“生成单个文件”,则发布工作正常。我正在使用 Visual Studio 2019(16.4.1 和预览版 16.5.1)

我在发布时收到此一般错误:

发布遇到错误。发布遇到错误。我们 无法确定错误的原因。检查输出日志 更多细节。

诊断日志已写入以下位置: "C:\Users\用户名\AppData\Local\Temp\tmpD176.tmp"

加上一个不太有用的日志文件:

System.AggregateException: One or more errors occurred. ---> System.Exception: Publish has encountered an error. We were unable to determine the cause of the error. Check the output log for more details. 
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at Microsoft.Publish.Framework.Model.DefaultPublishSteps.<>c__DisplayClass26_0.<IsBuildCompletedSuccessfully>b__2()
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.Execute()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Publish.Framework.Model.DefaultPublishSteps.<DefaultCorePublishStep>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.Publish.Framework.ViewModel.ProfileSelectorViewModel.<RunPublishTaskAsync>d__156.MoveNext()
---> (Inner Exception #0) System.Exception: Publish has encountered an error. We were unable to determine the cause of the error. Check the output log for more details. <---

System.Exception: Publish has encountered an error. We were unable to determine the cause of the error. Check the output log for more details. 

我发现 this question 表明这可能是 Visual Studio 超时的问题,尽管该问题与 Azure 有关。我还发现了这个Github issue,当我尝试使用ReadyToRun 发布时,它显示出类似的情况。

我们在几周前成功发布了,改动很小。这可能是 Visual Studio 的问题吗?我意识到这可能是引用和 NuGet 包的问题,​​但我真的不知道从哪里开始了解这个问题的核心......发布没有提供任何有关可能导致问题的有用信息.有什么想法吗?

【问题讨论】:

您是否尝试使用dotnet CLI 从命令行发布它? @mm8 谢谢,这有助于提供更多信息,但仍然没有解决问题。我怀疑问题可能出在 Visual Studio 上。 【参考方案1】:

我在使用 WPF 应用程序时遇到了同样的问题:

VS2019 16.3 和 dotnet Core 3.0 - 发布工作正常。

更新到 VS2019 16.4.1 和 dotnet Core 3.1 - 发布失败,如所述。

唯一的区别是我的目标是 X64。

在多次尝试编辑发布 FolderProfile(均未解决问题)后,我完全删除了 FolderProfile 并创建了一个针对不同文件夹的新文件夹。

再次发布作品。

希望这会有所帮助。

【讨论】:

不知何故,这对我有用..但只是有时。恢复到 .net core 3.0 后,我能够发布,但是当我在 64 和 86 之间切换运行时时,它遇到了同样的问题。切换回来也再次遇到同样的错误。我正在尝试使用它来查看可能触发此问题的原因,但我现在似乎无法重现该错误。对我有用的是清除我的 NuGet 缓存(并在必要时删除 nuget 文件夹)。我会继续调查,如果我能找到问题并重现它,我会在这里提及。 进一步更新:后续构建仍然存在间歇性问题。解决方法:删除 bin、obj 和 publish 文件夹。然后重建并创建新的发布文件夹。然后似乎发布OK【参考方案2】:

我遇到了同样的问题,但我认为我的问题与我设置“PublishSingleFile”时甚至无法构建的项目有关。

我在他们的 github 问题帖子中添加了 comment,假设这是他们的错误,因为 .net core 3.0 正在为我发布很好。

【讨论】:

【参考方案3】:

对我来说,错误与自定义 nuget 源有关,例如 Azure DevOps Artifacts。 有时,构建脚本会尝试从 Azure DevOps 还原 nuget,但会因(未经授权)错误而失败,这会在帖子中产生错误。

暂时禁用自定义 nuget 源,无论使用单个文件等选项如何,都可以再次发布。

【讨论】:

【参考方案4】:

我有同样的问题,在我的情况下,解决方案是从 .csproj 文件中删除一些 X86 系统的 dll:

<ItemGroup>
    <Reference Include="System.Management">
      <HintPath>..\..\..\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6.1\System.Management.dll</HintPath>
    </Reference>
  </ItemGroup> 

【讨论】:

【参考方案5】:

值得检查您的互联网连接。我在发布独立部署时遇到了问题,因为我位于公司防火墙后面。和你一样的错误:

发布遇到错误。我们无法确定 错误的原因。查看输出日志以获取更多详细信息。

该日志文件中没有更多信息。在我断开连接后,*** 应用发布时没有出现错误。

【讨论】:

【参考方案6】:

我在发布我的应用程序时也遇到了同样的问题。当我将它添加到 .csproj 文件中的包引用中时,奇怪的事情就解决了

    <PackageReference Include="EFCore.BulkExtensions" Version="5.2.8" />

添加此包引用后,当我重建和发布时,它正在工作。

【讨论】:

以上是关于WPF .NET Core 3.1 应用程序发布单个文件(发布)失败的主要内容,如果未能解决你的问题,请参考以下文章

无法为 Net Core 3.1 WPF 应用程序创建类型为“DbContext”的对象

适用于任何平台的 WPF .net Core 3.1 应用程序部署工具?

WPF .Net Core 3.1 依赖注入/服务参考问题

在 .Net Core 3.1 的 2.0 版中找不到 MahApps ToggleSwitch

获取.Net Core 3.1 单文件可执行版本号

.Net Core 3.1 Process.Start("www.website.com") 在 WPF 中不起作用