通过 ClickOnce 发布 WPF 应用程序时,引用项目出现 .NET 5 TargetFramework 问题

.NET 5 TargetFramework issue with referenced project when publishing WPF App over ClickOnce

我正在尝试使用 ClickOnce(内置于 VS2019)发布一个带有 Target Framework net5.0-windows 的 WPF 应用程序,它有一个对另一个 .NET5 Class 库的项目引用。

但我总是运行进入以下异常:

Publish has encountered an error.

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

诊断日志向我显示了确切的异常:

System.AggregateException: One or more errors occurred. ---> Microsoft.WebTools.Shared.Exceptions.WebToolsException: 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 ---

---> (Inner Exception #0) Microsoft.WebTools.Shared.Exceptions.WebToolsException: Publish has encountered an error. We were unable to determine the cause of the error. Check the output log for more details. <---

Microsoft.WebTools.Shared.Exceptions.WebToolsException: Publish has encountered an error. We were unable to determine the cause of the error. Check the output log for more details.

问题很容易重现:

  1. 使用 WPF 项目 (.NET5) 创建新解决方案
  2. 在此解决方案中创建新的 Class 库 (.NET5)
  3. 从 WPF 应用程序引用 Class库
  4. 尝试使用 ClickOnce 发布 WPF 应用程序(右键单击 WPF 应用程序项目 -> 发布 -> ClickOnce,...)

这是我按照上述步骤创建的演示项目:

PublishDemo.Core(Class 图书馆)

<Project Sdk="Microsoft.NET.Sdk">
   <PropertyGroup>
      <TargetFramework>net5.0</TargetFramework>
   </PropertyGroup>
</Project>

PublishDemo.Wpf(WPF 应用程序)

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <OutputType>WinExe</OutputType>
        <TargetFramework>net5.0-windows</TargetFramework>
        <UseWPF>true</UseWPF>
    </PropertyGroup>

    <ItemGroup>
        <ProjectReference Include="..\PublishDemo.Core\PublishDemo.Core.csproj" />
    </ItemGroup>
</Project>

构建输出显示以下错误:

Metadata file 'C:\work\source\unmanaged\PublishDemo\PublishDemo\PublishDemo.Core\bin\Release\net5.0-windows\PublishDemo.Core.dll' could not be found

当使用 Release-build 配置时,它会尝试引用路径 \bin\Release\net5.0-windows 我认为这没有任何意义因为 Class 库针对框架类型 net5.0。此外,在检查文件夹后,Class 库确实将构建的文件放入名为 net5.0.

的文件夹中

问题是我不知道在哪里可以更改它,或者是否有解决该问题的方法。 我已经更新到最新的VisualStudio版本(16.9.0),因为我认为可能是因为在Vs中新实现了ClickOnce方式,但这并没有解决问题。 发布到文件夹有效。 Azure 我没有,所以我不能尝试。

谁能帮我解决这个问题? 另外,如果您需要更多信息,我很乐意提供。

我发现了这个报告的问题,错误看起来像你的: https://developercommunity.visualstudio.com/t/clickonce-publish-for-net-core-31-and-net-50-may-f/1275937
从上面的线程中复制了一些变化:
发布命令似乎在与已发布项目相同的目标运行时中寻找文件,即使它可能不同(并在发布命令之外成功构建)。 即使应用程序以 net5.0-windows 为目标并且 class 库是 net5.0.
也会出现此问题 解决方法是 select 特定的 Target Runtime(即 win-x64),而不是使用默认的 Portable.