WPF 修复 dotnet 6 与源代码包冲突

2021-12-31 08:27:45 浏览数 (1)

在 dotnet 6 时,官方为了适配好 Source Generators 功能,于是默认就将 WPF 的 XAML 构建过程中,引入第三方库的 cs 文件,这个功能默认设置为开启。刚好源代码包为了修复在使用 dotnet 6 SDK 之前,在 WPF 的构建 XAML 过程中,不包含第三方库的代码文件,从而使用黑科技将源代码包加入到 WPF 构建 XAML 中。在 VisualStudio 升级到 2022 版本,或者是升级 dotnet sdk 到 dotnet 6 版本,将会更新构建调度,让源代码包里的代码文件被加入两次,从而构建失败

修复方法很简单,在不更改源代码包的前提下,可以在 csproj 项目文件里加入以下代码

代码语言:javascript复制
    <IncludePackageReferencesDuringMarkupCompilation>False</IncludePackageReferencesDuringMarkupCompilation>

更改之后的 csproj 代码如下

代码语言:javascript复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net6.0-windows</TargetFramework>
    <UseWPF>true</UseWPF>
    <IncludePackageReferencesDuringMarkupCompilation>False</IncludePackageReferencesDuringMarkupCompilation>
  </PropertyGroup>

</Project>

此影响不仅包含 TargetFramework 为 net6.0-windows 的 WPF 应用,而是任何使用 SDK 风格的 WPF 项目。其原因是 dotnet 6 此更改是在 dotnet sdk 更改构建调度过程,和具体应用的框架无关,只影响构建本身

更多关于 WPF 构建过程,请看 WPF 程序的编译过程 - walterlv

本文会经常更新,请阅读原文: https://blog.lindexi.com/post/WPF-修复-dotnet-6-与源代码包冲突.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

0 人点赞