我目前正在使用.NET升级助手作为基础将我的WPF项目从.NET Framework 4.8迁移到.NET 6,然后手动修复剩余的问题。
我所有的项目都有一组共享的库,其中一个包含标准类和一些自定义的UserControl
。当将这个特定的库迁移到.NET 6时,这个库引用的框架是Microsoft.NETCore.App
和Microsoft.WindowsDesktop.App
。问题是当我试图在另一个项目中使用这个库时,我得到以下警告:
警告MSB3277发现不同版本的“WindowsBase”之间存在无法解决的冲突。
“WindowsBase,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”和“WindowsBase,Version=6.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”之间存在冲突。
选择“WindowsBase,Version=4.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”是因为它是主要的,而不是“WindowsBase,Version=6.0.0.0,Culture=neutral,PublicKeyToken=31bf3856ad364e35”。
查看库引用的两个框架引用的WindowsBase,我发现Microsoft.NETCore.App
引用WindowsBase v4.0.0.0,而Microsoft.WindowsDesktop.App
引用WindowsBase v6.0.0.0。
我该如何解决这个问题?
2条答案
按热度按时间px9o7tmv1#
我遇到的确切问题,你当升级一个csharp项目从.Net框架到. net6。
有一些程序集下的依赖项(如
system
system.xml
)指向错误的框架路径,但不能删除或修改。在csdn上没有关于这个问题的太多信息,所以我真的花了一段时间通过反复试验找到根本原因,最后是在我的csproj项目文件中导入的WinFX.Targets
文件带来了这些.net framework依赖项。WinFX.Targets
文件在升级前被csproj导入,升级时删除了导入。这是项目所必需的,所以我没有修改就把它添加回去了,这导致了MSB3277构建警告。q43xntqr2#
我在一个包含共享Razor类库(RCL)的解决方案中遇到了同样的问题,该类库被两个项目引用:1).NET MAUI Blazor应用程序(用于桌面);2)Blazor Server App(用于Web)。在我的例子中,我犯了一个错误,将Microsoft.AspNetCore.Hosting直接添加到RCL,这意味着我必须将Microsoft.AspNetCore.App作为框架添加到RCL。
旁注:Microsoft.AspNetCore.App不应与Microsoft.NETCore.App混淆。Razor类库 * 确实 * 针对后者。
当我运行Web应用程序时,一切都很好,因为(截至撰写本文时)Blazor Server Apps使用Microsoft.AspNetCore.App作为框架(请参阅Visual Studio〉Project〉Dependencies〉Frameworks)。然而,正如我所意识到的,.NET MAUI Blazor应用程序针对的是框架net7.0-windows,net7.0-maccatalyst等。
我最终创建了一个接口,RCL引用了它,并在每个应用程序中注册了特定于框架的实现。
P.S.,我所有的项目都是针对.NET 7.0的。