.net framework手动升级到.net core注意点

因为项目原因,还使用着比较原始的**.NETFramework** 框架,但因为某种原因,暂时不让升级到.NET 6。为了能够解锁更多**VisualStudio2022** 的功能,尝试手动修改 **csproj**文件。

这个过程中,也会遇到不少坑,再次做个记录。

一、类库中包含了 App.xaml

错误输出:

C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2302,5): warning MSB3270: 所生成项目的处理器架构"MSIL"与引用"D:\work\project\xxx\Utils\xxx\....\Debug\xxx.dll"的处理器架构"x86"不匹配。

这种不匹配可能会导致运行时失败。请考虑通过配置管理器更改您的项目的目标处理器架构,以使您的项目与引用间的处理器架构保持一致,或者为引用关联一个与您的项目的目标处理器架构相符的处理器架构。

1>C:\Program Files\dotnet\sdk\6.0.301\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFX.targets(223,9): error MC1002: 库项目文件无法指定 ApplicationDefinition 元素。1>C:\Program Files\dotnet\sdk\6.0.301\Sdks\Microsoft.NET.Sdk.WindowsDesktop\targets\Microsoft.WinFX.targets(223,9): error BG1003: 项目文件包含无效的属性值。

解决方法:

删除类库中的 App.xaml,因为 Microsoft.NET.Sdk中已经包含了对它编译方式的定义。

二、AssemblyAttribute 提示重复

因为**Microsoft.NET.Sdk** 中已经包含了对它的定义,我们只需要在 csproj 中,将自动生成 **AssemblyInfo**文件关闭。

cs 复制代码
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>

三、生成事件批处理报错

事件编译,新旧不一样,需要修改。把bat批处理复制到IDE里面自动生成即可

旧的 **csproj**形式

html 复制代码
<PropertyGroup>

<PreBuildEvent>if "$(PlatformName)" == "x64" (xcopy /E /Y "$(ProjectDir)libs\x64\*.*" "$(ProjectDir)libs\") else (xcopy /E /Y "$(ProjectDir)libs\x86\*.*" "$(ProjectDir)libs\")</PreBuildEvent>

</PropertyGroup>

新的 **csproj**方式

html 复制代码
<Target Name="PreBuild" BeforeTargets="PreBuildEvent">

<Exec Command="if &quot;$(PlatformName)&quot; == &quot;x64&quot; (xcopy /E /Y &quot;$(ProjectDir)libs\x64\*.*&quot; &quot;$(ProjectDir)libs\&quot;) else (xcopy /E /Y &quot;$(ProjectDir)libs\x86\*.*&quot; &quot;$(ProjectDir)libs\&quot;)" />

</Target>

主意看两端批处理的表示方式,可以很明显的看出来,相关的配置已经完全不一样了。

四、命令行无法构建x64的原因

错误提示

...省略...

project.assets.json 没有 net452/win7-x64 的目标

...省略...

可能需要在项目 RuntimeIdentifiers 中包括 "win7-x64".

这个错误的主要原因是因为nuget包还原的时候,默认是按 win7-x86 来还原的。我们可以在 project.assets.json文件里面找到这个配置项。要解决这个问题,我们就需要在还原 nuget包的时候,告诉编译器我们是按 win7-x64来做编译。

具体如下:

dotnet restore -r win7-x64

五、.NET Framework v4.5.2 基于netstandar无法编译通过

netstandar 不支持.net framework v4.5.2,升级到.net framework v4.6.1 以上即可。

六、动态库的引用差异

  1. .NET6中不需要额外引用 System.Web.dll,直接 UsingSystem.Web的命名空间即可

  2. System.Windows.Form.MenuItem 使用 ToolStripMenuItem 代替

  3. System.Windows.Interactivity.dll使用 Microsoft.Xaml.Behaviors.Wpf nuget包代替

  4. System.Drawing.dll 使用 System.Drawing.Common nuget包代替

  5. NotifyIcon.ContextMenu 使用 NotifyIcon.ContextMenuStrip 代替

  6. ContextMenu 使用 ContextMenuStrip 代替

关于手动升级到新版的 csproj文件格式,网上有较多教程,我这边就不列出来了。主要有两种方式:

  1. 通过工具升级

  2. 手动修改 csproj文件

相关推荐
波力海苔夹心脆6757 小时前
C# 机器视觉实战:单相机引导机械手精准贴合,从拍照、偏差计算(平移+旋转)到坐标补偿全解
开发语言·经验分享·数码相机·c#·视觉检测·.net
慧都小妮子7 小时前
Stimulsoft 2026.4 发布:Markdown 组件、桑基图与 .NET 11 支持
.net·数据可视化·stimulsoft·版本更新·报表控件·桑基图·.net 11
上位机妹子1 天前
EF Core 两种继承映射:每层次一张表(TPH)与每类型一张表(TPT)
数据库·c#·.netcore·ef core
波力海苔夹心脆6751 天前
C# 视觉检测实战:PLC 按钮触发 VisionPro 检测,OK 亮灯 / NG 灭灯(西门子 PLC,含界面显示与图片存档)
开发语言·经验分享·c#·自动化·视觉检测·.net
hez20101 天前
一行代码在 .NET 项目里启用 Satori GC
c#·.net·.net core·gc·clr
QUDONG_biubiubiu1 天前
.NET Runtime 6.0/7.0/8.0/9.0下载修复教程,软件打不开这样解决
.net·net runtime下载·net运行库修复·net runtime安装
宝桥南山1 天前
.NET 11 - 尝试创建一下AGUIServer和AGUIClient(基于新版.NET SDK for AG-UI)
microsoft·ai·微软·c#·aigc·.net
波力海苔夹心脆6751 天前
C# LINQ 入门到上手:一篇讲透查询语法、常用操作符与延迟执行(含示例与速查表
经验分享·c#·.net·solr·linq
小羊没烦恼!2 天前
Windows Azure Platform体验(1):Windows Azure
java·大数据·后端·python·flask·word·.net
CSharp精选营3 天前
IIS 后面挂 Kestrel,这 3 个配置错了就 502
kestrel·.net·iis配置