我正在尝试迁移解决方案中的各种C#库项目以使用新的SDK (VS2017+) format。该解决方案还包含几个需要引用这些库的ASP.NET项目。
我知道我目前无法将ASP.NET项目更新为使用新的基于SDK的构建系统,但是我已将其修改为使用<PackageReference/>
条目而不是{{1 }}文件中的顶级NuGet参考。
解决方案中有许多与以下内容类似的依赖项场景:
packages.config
即一个ASP.NET项目引用顶级NuGet包Project A和Project B;项目A引用了一个NuGet包,而项目C则引用了它;项目B引用项目C; Project C引用了一个NuGet包。使用ASP.NET Project
--> Top.Level.Package (NuGet)
--> Project A (csproj)
--> Some.Package (NuGet)
--> Project C (csproj)
--> Some.Other.Package (NuGet)
--> Project B (csproj)
--> Project C (csproj)
--> Some.Other.Package (NuGet)
条目获取NuGet程序包引用,将所有非ASP.NET项目都修改为SDK项目,并且所有传递依赖项在它们之间自由流动。
我遇到的问题是,当我构建ASP.NET应用程序时,MSBuild正确复制了Project A和Project B的程序集,并且这些程序集从顶级和可传递的NuGet程序包引用复制到<PackageReference/>
文件夹,但它不会复制项目A和项目B都需要的传递项目C的输出。
除了将ASP.NET项目中的顶级项目引用添加到“缺失”项目之外,还有没有一种直接的方法?
答案 0 :(得分:1)
这是因为ASP.NET项目不(并且当前不)支持SDK样式的项目类型。
SDK样式的项目会主动查询项目引用以获取进一步的依赖关系。由于ASP.NET项目不执行此操作,因此您必须自己添加引用。 (或者您自己添加所需的MSBuild逻辑,如this file所示-搜索IncludeTransitiveProjectReferences
,但由于它可能与VS更新冲突,因此我实在不推荐这种方法)