为何VSTS NuGet源重复安装同包报错?Azure Durable API测试问题
Hey,我正好处理过类似的场景,给你拆解两个问题的解决方案:
SpecFlow目前对.NET Core的支持确实有限,所以你用.NET Framework测试项目的思路是对的。要顺利引用netstandard2.0的Contracts类库,关键是做好版本兼容和配置:
第一步:确认测试项目的目标框架
把你的SpecFlow测试项目目标框架改成至少.NET Framework 4.6.1——这个版本及以上才完全支持netstandard2.0,低于这个版本会出现兼容性问题。两种引用方式任选其一:
- 直接关联项目(适合本地开发场景)
如果两个解决方案在同一台机器上,直接在测试解决方案里添加现有项目:右键测试解决方案 →「添加」→「现有项目」,找到主解决方案里的Contracts类库(.csproj文件),添加完成后右键测试项目→「添加引用」,勾选Contracts项目即可。 - NuGet包引用(适合独立测试环境)
把Contracts类库打包成NuGet包,发布到你的VSTS(Azure DevOps)Artifacts源。然后在测试项目中安装这个包即可。如果遇到兼容性警告,别慌,只要测试项目是4.6.1+的框架,一般都是可以正常使用的。
- 直接关联项目(适合本地开发场景)
万一遇到编译错误?
可以在测试项目的app.config或web.config里添加以下绑定重定向配置,帮助.NET Framework正确识别netstandard的依赖:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.2.0" newVersion="4.2.2.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" /> </dependentAssembly> </assemblyBinding> </runtime>
这个问题大多是本地缓存混乱、源配置重复或者版本冲突搞出来的,试试下面的步骤排查:
先清本地缓存:
打开命令行跑dotnet nuget locals all --clear,或者在Visual Studio里走「工具」→「选项」→「NuGet包管理器」→「常规」,点击「清除所有NuGet缓存」,把旧的缓存清干净。检查包源配置:
进入「工具」→「选项」→「NuGet包管理器」→「包源」,看看是不是重复添加了同一个VSTS源?如果有,删掉多余的,只留一个正确的源。切换到PackageReference格式:
如果你的测试项目还在用packages.config,强烈建议迁移到PackageReference——右键packages.config文件,选择「迁移到PackageReference」。这种格式的依赖管理更清晰,能减少很多重复安装的坑。锁定包版本:
在NuGet包管理器里,给Contracts包设置固定版本,别用浮动版本(比如1.*),避免每次安装时拉取不同版本导致冲突。检查VSTS源里的包:
登录Azure DevOps,进入「Artifacts」→你的NuGet源,搜索Contracts包,看看是不是有重复的版本或者损坏的包?如果有,删掉多余的版本,重新发布一个干净的包。
如果还是不行,试试在Package Manager Console里指定版本安装,比如:Install-Package YourContractsPackageName -Version 1.0.0 -Source "你的VSTS源名称"
内容的提问来源于stack exchange,提问作者AndrasCsanyi

