ASP.NET项目中的可传递SDK项目引用

3

我正在尝试将解决方案中的各种C#库项目迁移到使用新的SDK (VS2017+)格式。该解决方案还包含一些需要引用这些库的ASP.NET项目。

我知道目前无法更新ASP.NET项目以使用基于新SDK的构建系统,但我已将它们修改为使用<PackageReference/>条目而不是顶层NuGet引用的packages.config文件。

该解决方案中存在许多类似于以下依赖关系方案:

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)

例如,一个ASP.NET项目引用了顶级NuGet包、Project A和Project B;Project A引用了一个NuGet包和Project C;Project B引用了Project C;而Project C引用了一个NuGet包。所有非ASP.NET项目都已修改为使用<PackageReference/>条目的SDK项目进行NuGet包引用,并且所有传递依赖项之间都流动得很好。
我遇到的问题是,当我构建ASP.NET应用程序时,MSBuild会正确地将Project A和Project B的程序集以及顶级和传递的NuGet包引用的程序集复制到bin文件夹中,但它不会复制传递的Project C的输出,这对Project A和Project B都是必需的。
除了在ASP.NET项目中添加顶级项目引用以解决“缺失”的项目外,还有没有简单直接的方法可以解决这个问题?
1个回答

2
这是因为ASP.NET项目不支持SDK样式的项目类型(现在也无法支持)。
SDK样式的项目会主动查询项目引用以获取更多依赖项。由于ASP.NET项目没有这样做,您必须自己添加引用。(或者像此文件中所示添加所需的MSBuild逻辑 - 搜索IncludeTransitiveProjectReferences,但我不能真正推荐这种方法,因为它可能与VS更新冲突)。

谢谢Martin。我决定采取的方法是创建一个包含.props文件的元(SDK)项目,该文件导入解决方案中的所有其他SDK项目,然后在我的ASP.NET项目文件中引用相同的.props文件。需要引用相同项目集的SDK项目只需向元项目添加顶级引用即可。这有点笨拙,但足以胜任工作。 - Graham Watts

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接