SDKStyle的Framework项目使用旧版项目文件生成的Nuget包遇到的问题
随笔-2021-11-10
SDKStyle的Framework项目使用旧版项目文件生成的Nuget包遇到的问题
简介
C#从NetCore之后使用了新版的项目文件,SDK-Style
项目,新版本的项目文件再VS中显示更加简洁明了,项目自定义配置更加方便,并且nuget依赖保存在项目文件中且还原路径在系统用户目录(不会出现以前的解决方案目录改变导致packages文件夹相对路径改变,导致部分nuget还原失败)
所以,C#的项目文件类型分为两种,个人推荐使用第一钟
SDK-Style
风格项目文件(NetCore之后默认使用,Framework可升级为这个)- .NetFramework默认旧版本的项目文件
注:如果使用SDK-Style风格项目文件的项目使用非字符串的资源文件,如果该项目框架版本不支持
System.Resources.Extensions
包,则无法使用dotnet cli
进行编译,只能使用msbuild和visualstudio。
问题
最近遇到使用SDK-Style风格的.NetFramework4.0的Winform项目,该项目依赖了一个使用旧版本项目文件和Nuget.exe生成的nuget包,当项目所有的控件窗体数量超过两三千后,就会出现无法加载符号进行断点调试。
起初以为是代码问题,最后把那个项目的类一个一个删,最后删了一个控件后就可以调试了,以为是这个控件的坑,结果发现只是个普通的按钮,然后发现删除任意一个控件都可以调试,在增加任意一个控件或窗体就不可以了,才发现是控件实例数量问题,但是在其他控件数量更多的项目测试并不会。最后一个类一个类逐步排查才发现是和这个nuget包有冲突。
最后排查出是控件数量和那个nuget包依赖,只要两者同时满足,就会出现这个问题,但是我自己用Framework版项目文件生成的nuget包却无法重现该问题,最后因为时间关系只能排查到这了。
解决方案
最后把原来的.NetFramework项目升级成SDK-Style风格项目文件后,在生成nuget包就没出现这个问题了。
所以,还是推荐使用SDK-Style的的项目文件,能适配各种新特性新功能。