使用.NET Upgrade Assistant升级WPF项目转SDK样式时遇路径找不到错误
错误详情
System.IO.DirectoryNotFoundException: 找不到路径的一部分:'C:\Users\nikhilsh\AppData\Local\Temp\UpgradeAssistant\Projects\a24f30fa-182a-40e9-8301-2fe09a378e8d\2024-02-01--18-08-13\Service References\DataDwonloadAuthServiceReference\WBid.WBidClient.Main.DataDwonloadAuthServiceReference.AuthServiceResponseModel.datasource'。
在 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
在 System.IO.File.InternalCopy(String sourceFileName, String destFileName, Boolean overwrite, Boolean checkHost)
在 Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet1 excludeFolders, Boolean recursive)(位于D:\a\_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:第23行) 在 Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet1 excludeFolders, Boolean recursive)(位于D:\a_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:第31行)
在 Microsoft.UpgradeAssistant.Services.FileSystemExtensions.DirectoryCopy(IFileSystem fileSystem, String sourceDirectory, String targetDirectory, ISet`1 excludeFolders, Boolean recursive)(位于D:\a_work\1\s\src\engine\Services\FileSystem\FileSystemExtensions.cs:第31行)
在 Microsoft.UpgradeAssistant.Transformers.ProjectSdkStyleTransformer.d__2.MoveNext()(位于D:\a_work\1\s\src\engine\Transformers\Project\ProjectSdkStyleTransformer.cs:第65行)
--- 引发异常的上一位置的堆栈跟踪结束 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
在 Microsoft.UpgradeAssistant.Operations.Operation.d__23.MoveNext()(位于D:\a_work\1\s\src\engine\Operations\Operation.cs:第386行)
--- 引发异常的上一位置的堆栈跟踪结束 ---
在 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
在 Microsoft.UpgradeAssistant.Operations.Operation.d__21.MoveNext()(位于D:\a_work\1\s\src\engine\Operations\Operation.cs:第274行)
问题原因
升级助手在并行升级过程中,尝试复制原项目的服务引用相关文件到临时目录时,找不到指定的.datasource文件,可能是原项目服务引用文件缺失、损坏,或者临时目录缓存了无效数据导致。
解决方案
1. 检查并修复原项目的服务引用
- 打开原WPF项目,定位到
Service References下的DataDwonloadAuthServiceReference - 检查是否存在
WBid.WBidClient.Main.DataDwonloadAuthServiceReference.AuthServiceResponseModel.datasource文件 - 若文件缺失或损坏,右键该服务引用选择更新服务引用,或直接删除服务引用后重新添加
2. 清理升级助手临时缓存
- 删除路径
C:\Users\nikhilsh\AppData\Local\Temp\UpgradeAssistant下的所有文件和文件夹,清除旧的缓存数据后重新运行升级助手
3. 手动转换为SDK样式项目(自动升级失败时)
- 备份原项目的
.csproj文件 - 创建一个新的.NET 6 WPF项目,参考其SDK样式的项目结构,手动修改原项目的
.csproj:<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net6.0-windows</TargetFramework> <UseWPF>true</UseWPF> </PropertyGroup> <!-- 手动添加原项目的文件引用、NuGet包引用等 --> </Project> - 重新处理服务引用:使用.NET 6的Connected Services或
dotnet-svcutil工具重新生成服务引用,替代原有的Service References
4. 跳过服务引用目录执行升级
- 使用升级助手的
--exclude参数,暂时排除Service References目录,先完成SDK样式转换,之后再手动处理服务引用 - 示例命令:
upgrade-assistant upgrade YourProject.csproj --exclude "Service References"
内容的提问来源于stack exchange,提问作者Vinu PR

