将.NET Framework项目重定向到.NET Core时VS2019属性窗口加载错误求助
把.NET Framework项目迁移到.NET Core的正确步骤
问题场景
你尝试直接修改旧格式的BOne.Ewa.Api.csproj文件,将<TargetFrameworkVersion>v4.8</TargetFrameworkVersion>替换为<TargetFramework>netcoreapp3.1</TargetFramework>后,在Visual Studio 2019中遇到以下错误:
尝试加载项目属性窗口时出错,请关闭窗口重试。
找不到成员。(HRESULT异常: 0x80020003 (DISP_E_MEMBERNOTFOUND))
错误原因
原项目使用的是旧版MSBuild项目格式(基于http://schemas.microsoft.com/developer/msbuild/2003),而.NET Core依赖的是SDK风格项目格式,两者的项目结构、导入的MSBuild目标和属性差异极大。直接修改目标框架属性会导致MSBuild无法识别所需的成员,从而抛出错误。
正确迁移步骤
- 不要直接修改旧项目文件,按以下步骤操作:
- 在Visual Studio中新建一个**类库(.NET Core)**项目,目标框架选择
netcoreapp3.1(或更高的LTS版本如.NET 6),项目名称保持BOne.Ewa.Api。 - 迁移代码资源:将原项目中的
.cs文件、视图文件(如果是Razor项目)、配置文件等复制到新项目对应的目录下。 - 重构NuGet依赖:原项目中通过
packages目录导入的包,需要替换为SDK风格的<PackageReference>节点。例如原有的Microsoft.AspNetCore.Mvc.Razor.Extensions.2.2.0,可以直接在新项目的csproj中添加:
也可以通过Visual Studio的NuGet包管理器搜索安装对应的包。<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.Extensions" Version="2.2.0" /> - 移除.NET Framework特有配置:原项目中的
<TargetFrameworkProfile>、<FileUpgradeFlags>、<OldToolsVersion>等配置是.NET Framework专属的,SDK风格项目不需要这些内容。 - 适配API差异:检查代码中是否使用了.NET Framework特有的API(如
System.Web相关类),替换为.NET Core中的等效API。 - 验证编译:打开新项目,编译并修复出现的错误,确保所有功能正常运行。
- 在Visual Studio中新建一个**类库(.NET Core)**项目,目标框架选择
额外提示
如果需要保留对.NET Framework的兼容,可以将新项目设置为多目标框架,例如在csproj中添加:
<TargetFrameworks>net48;netcoreapp3.1</TargetFrameworks>
这样项目可以同时编译为.NET Framework 4.8和.NET Core 3.1版本,逐步完成迁移过渡。
内容的提问来源于stack exchange,提问作者Hunter91151
相关产品推荐
相关产品推荐

