.Net升级助手转换项目为SDK样式失败:System.IO.IOException异常
VB.Net WinForms启动项目升级到.NET时IOException问题排查方案
问题描述
正在将旧VB.Net WinForms应用从.Net Framework升级到.NET,解决方案包含12个项目,其中11个已顺利完成升级,但包含应用UI的启动项目升级第一步就失败,抛出System.IO.IOException异常,日志如下:
Microsoft.UpgradeAssistant.Transformers.ProjectSdkStyleTransformer info: Converting project 'C:\source\CommTool\Application\Commission.vbproj' to SDK style. error: System.IO.IOException, at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) at System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost) at Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet`1 excludeFolders, Boolean recursive) in D:\a\_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:line 23 at Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet`1 excludeFolders, Boolean recursive) in D:\a\_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:line 31 at Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet`1 excludeFolders, Boolean recursive) in D:\a\_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:line 31 at Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet`1 excludeFolders, Boolean recursive) in D:\a\_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:line 31 at Microsoft.UpgradeAssistant.Transformers.ProjectSdkStyleTransformer.<RunAsync>d__2.MoveNext() in D:\a\_work\1\s\src\engine\Transformers\Project\ProjectSdkStyleTransformer.cs:line 65 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at Microsoft.UpgradeAssistant.Operations.Operation.<RunTransformerAsync>d__23.MoveNext() in D:\a\_work\1\s\src\engine\Operations\Operation.cs:line 387 --- End of stack trace from previous location where exception was thrown --- at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at Microsoft.UpgradeAssistant.Operations.Operation.<RunNodeTransformersAsync>d__21.MoveNext() in D:\a\_work\1\s\src\engine\Operations\Operation.cs:line 274 info: Done已尝试.NET 6、7、8版本,结果一致;检查过所有项目的.vbproj文件权限均相同,目前该项目仍引用.Net Framework,无法继续推进解决方案升级。
排查与解决步骤
- 检查文件锁定状态:异常发生在文件复制环节,大概率是启动项目的部分文件被其他进程占用(如Visual Studio、资源管理器、杀毒软件、第三方调试工具)。关闭所有可能占用项目文件的程序,重启Visual Studio后重试升级。
- 清理项目缓存目录:
- 手动备份启动项目的完整目录
- 删除项目目录下的
bin、obj、.vs、packages等缓存文件夹 - 清理解决方案根目录下的
packages、.vs文件夹,避免缓存干扰
- 手动转换为SDK风格项目:若升级助手持续失败,可直接手动修改
.vbproj文件:- 备份原
Commission.vbproj文件 - 替换为适配WinForms的VB.NET SDK风格模板,根据项目实际情况调整:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <UseWindowsForms>true</UseWindowsForms> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> <ItemGroup> <!-- 手动添加原项目中的所有代码、资源文件 --> <Compile Include="**\*.vb" /> <EmbeddedResource Include="**\*.resx" /> <None Include="**\*.settings" /> <!-- 其他自定义资源文件按需添加 --> </ItemGroup> <!-- 迁移原项目的NuGet包引用、项目引用到此处 --> </Project> - 保存后重新加载项目,逐一修复缺失的引用或文件路径问题
- 备份原
- 验证完整目录权限:除了.vbproj文件,检查项目目录下的资源文件、配置文件(如
app.config)是否设置了只读属性,确认当前用户对项目目录拥有写入/修改权限(右键目录→属性→安全选项卡查看)。 - 临时禁用杀毒软件防护:部分杀毒软件会拦截升级助手的文件复制操作,临时关闭实时防护后重试升级。
内容的提问来源于stack exchange,提问作者forde52
相关产品推荐
相关产品推荐

