How to make and use captcha code in ASP.NET Core
在ASP.NET Core 中如何实现 captcha 验证码
这个 Demo 是在微软 msdn 中找到的,早期 2017年6月30日发布。发现它的时候是 2019年10月30日。这时候 .NET Core 版本 3.0 已发布。Visual Studio 2019 也已经自动更新至 16.3.7。
下面是升级的整个过程,文章最后附上升级完成的解决方案压缩包供下载调试。
1.检查当前.NET Core 版本
Demo 整体代码十分简洁,但是在我的环境中能通过编译无法正确运行。项目的默认属性如下:
2.切换 .NET Core 版本
接下来尝试将 .NET Core 版本切换至 .NET Core 2.1 (当前参与项目的版本),切换后只出现一个错误如下:
错误 CS0433 类型“Color”同时存在于“CoreCompat.System.Drawing, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c0a7ed9c2333b592”和“System.Drawing.Primitives, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中 CSCaptchaCodeASPNETCore D:SourceHow to make and use captcha code in ASP.NET CoreC#CSCaptchaCodeASPNETCoreCaptcha.cs 60 活动的
这个错误看起来是因为 CoreCompat.System.Drawing 1.0.0.0 与 System.Drawing.Primitives 4.2.0.0 中均定义了 Color 类。所以出现以上错误。于是首先做的就是将 Color 类使用完全限定名来指向其中一个。然后才发现这两个包中命名空间也是一样的。
3.更新包 CoreCompat.System.Drawing -Version 1.0.0-beta006
.NET Core 1.x 与 2.x 存在些许差异,既然 SDK 都更新了,也不妨继续把包更新了。打开菜单 工具(T) -> NuGet 包管理器(N) -> 管理解决方案的 NuGet 程序包(N)
结果可以看出这个包从 2016年6月27日发布后就没有再发布过新包。看起来这条路是走不通了。于是也放弃这个包并尝试将 CoreCompat.System.Drawing 这个包名在 NuGet 里面搜索看看有没有可以替代的包。通过搜索看起来并没有完全匹配的包名出现。于是尝试选择了第一个结果 System.Drawing.Common (4.6.0) 。比较幸运,错误消失,编译通过了。
但是依然不能正确运行,索性将整个解决方案的全部包通过 NuGet 升级(上图2/3/4/5)。最终 F5 能正常运行了。
4.升级前后对比与最终 Demo 下载
下面是升级前后依赖项的对比,主要是将:
CoreCompat.System.Drawing (Version 1.0.0-beta006) -> System.Drawing.Common (4.6.0)
下载地址:https://download.csdn.net/download/s2t11enterprise/11942562