Ian*_*emp 6 c# .net-core asp.net-core
项目 A (.NET Standard 2.0) 有一个使用TestServer的方法,因此它引用了Microsoft.AspNetCore.TestHost. 它内置于 NuGet 包中。
项目 B (.NET Standard 2.0) 引用了 A 中的 NuGet 包。它也内置在 NuGet 包中。
项目 C (.NET Core 2.2) 是一个 XUnit 测试项目,它引用了 NuGet 包 B。它有一个从 A 调用方法的测试。
所有这些项目都编译成功。但是当运行来自 C 的测试时,它失败并显示以下内容:
System.IO.FileNotFoundException : Could not load file or assembly
'Microsoft.AspNetCore.TestHost, Version=2.2.0.0, Culture=neutral,
PublicKeyToken=adb9793829ddae60'. The system cannot find the file specified.
Run Code Online (Sandbox Code Playgroud)
如果我手动添加Microsoft.AspNetCore.TestHost对 C的引用,则测试将成功执行。但根据我对 .NET 及其处理传递依赖关系的理解,这应该不是必需的。
我错了,还是这里有东西坏了?
感谢@Darjan Bogdan 的帮助,我找到了问题所在。
最初,项目 A 是一个带有packages.config和project.nuspec文件的 .NET Framework 项目,通过nuget pack project.nuspec在我们的构建管道中运行而构建到一个包中。
我再“升级”项目A到.NET 2.0标准(“升级” =从头开始重建它),并删除了现在,不必要的packages.config和project.nuspec文件,并改变了包装命令使用项目文件来代替:nuget pack project.csproj。因为它继续成功构建,我认为一切都很好。
但我不知道一件重要的事情:微软的 NuGet 团队更新了他们的工具以支持新格式的csproj文件,但并没有费心支持PackageReferenceelement。最终结果是nuget pack在新格式的项目上成功并生成一个nupkg文件,但该文件没有列出依赖项,这绝对是一种浪费时间的用户体验。
所以我现在改变了我们的构建管道来dotnet pack代替使用,并且依赖项按预期通过,一切正常。
| 归档时间: |
|
| 查看次数: |
346 次 |
| 最近记录: |