ASP.NET项目中的传递性SDK项目参考

时间:2019-04-18 12:06:32

标签: c# asp.net msbuild nuget csproj

我正在尝试迁移解决方案中的各种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项目中的顶级项目引用添加到“缺失”项目之外,还有没有一种直接的方法?

1 个答案:

答案 0 :(得分:1)

这是因为ASP.NET项目不(并且当前不)支持SDK样式的项目类型。

SDK样式的项目会主动查询项目引用以获取进一步的依赖关系。由于ASP.NET项目不执行此操作,因此您必须自己添加引用。 (或者您自己添加所需的MSBuild逻辑,如this file所示-搜索IncludeTransitiveProjectReferences,但由于它可能与VS更新冲突,因此我实在不推荐这种方法)