升级WinForm到.NET Core3.0时dotnet build报MSB3644错误如何解决?
解决.NET Core 3.0升级中GMap项目的MSB3644错误
这个问题我之前帮不少开发者处理过,核心原因是GreatMap(GMap)的相关项目还在瞄准非常老旧的.NET Framework 2.0,而.NET Core 3.0的SDK默认不会携带这么旧版本的引用程序集,况且微软早就停止对.NET Framework 2.0的官方支持了,安装对应的Developer Pack确实不现实。下面给你几个可行的解决方向:
方案1:手动升级GMap项目的目标框架版本
这是最直接的修复方式,步骤如下:
- 找到出错的两个项目文件:
GMap.NET.WindowsForms.csproj和GMap.NET.Core.csproj,用文本编辑器打开它们。 - 找到
<TargetFrameworkVersion>节点,把原来的v2.0替换成和你的主项目兼容的版本——比如.NET Framework 4.7.2(如果你的主WinForm项目是从.NET Framework升级来的),或者直接改成netcoreapp3.0(把GMap项目也迁移到.NET Core 3.0)。 - 保存文件后,重新执行
dotnet build。如果遇到少量引用报错,检查项目里的旧API,GMap这类成熟库在高版本框架下兼容性很好,大多只需替换一些已弃用的方法即可。 - 要是用Visual Studio开发,也可以右键项目→属性→应用程序,在「目标框架」下拉菜单里选择更高版本,VS会自动帮你处理项目文件和引用的调整。
方案2:改用官方适配.NET Core的GMap NuGet包
现在GMap.NET已经推出了支持.NET Core/.NET 5+的正式版本,这个方案最省心:
- 先移除你当前引用的本地GMap项目。
- 打开NuGet包管理器,搜索
GMap.NET.WindowsForms,安装最新的稳定版(确认版本兼容.NET Core 3.0)。 - 替换完引用后,项目的构建错误应该会直接消失,官方包已经处理了所有框架兼容性问题。
方案3:应急方案——添加框架引用回退(不推荐长期使用)
如果因为特殊原因必须保留旧版GMap项目,可以通过强制指定高版本引用程序集来临时解决:
- 在出错的
.csproj文件中添加以下配置:
<ItemGroup> <TargetFrameworkReference Include="Microsoft.NETFramework.ReferenceAssemblies" Version="4.7.2" /> </ItemGroup>
- 这个方法是让MSBuild用更高版本的框架引用替代2.0的,但可能存在潜在的API行为不一致问题,只建议临时应急使用。
整体来看,优先推荐方案2,其次是方案1,这两个方法都能从根本上解决兼容性问题,避免后续出现更多框架相关的报错。
内容的提问来源于stack exchange,提问作者Krishna Prasad S
相关产品推荐
相关产品推荐

