【问题标题】:Transitive SDK project references in ASP.NET projectsASP.NET 项目中的传递 SDK 项目引用
【发布时间】:2019-09-08 18:32:19
【问题描述】:

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

我知道我目前无法更新 ASP.NET 项目以使用新的基于 SDK 的构建系统,但我已将它们修改为使用 <PackageReference/> 条目而不是 packages.config 文件顶级 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)

即一个 ASP.NET 项目引用了一个顶级 NuGet 包,即项目 A 和项目 B;项目 A 引用了 NuGet 包和项目 C;项目 B 参考项目 C;并且项目 C 引用了一个 NuGet 包。所有非 ASP.NET 项目都已修改为 SDK 项目,使用 <PackageReference/> 条目作为 NuGet 包引用,并且所有传递依赖项在它们之间流动,没有任何问题。

我遇到的问题是,当我构建 ASP.NET 应用程序时,MSBuild 正确地将项目 A 和项目 B 的程序集以及来自顶级和传递 NuGet 包引用的程序集复制到bin 文件夹,但它没有复制项目 A 和项目 B 都需要的传递项目 C 的输出。

除了将 ASP.NET 项目中的顶级项目引用添加到“缺失”项目之外,是否有直接的解决方法?

【问题讨论】:

    标签: c# asp.net msbuild nuget csproj


    【解决方案1】:

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

    SDK 风格的项目主动查询项目引用以获取更多依赖项。由于 ASP.NET 项目不这样做,您必须自己添加引用。 (或者自己添加所需的 MSBuild 逻辑,如 this file 所示 - 搜索 IncludeTransitiveProjectReferences,但我不能真正推荐这种方法,因为它可能与 VS 更新冲突)

    【讨论】:

    • 谢谢马丁。我决定采用的方法是创建一个元 (SDK) 项目,其中包含一个 .props 文件,该文件导入解决方案中的所有其他 SDK 项目,然后在我的 ASP 中引用相同的 .props 文件。 NET 项目文件。需要引用同一组项目的 SDK 项目只需添加对元项目的顶级引用。这有点杂乱无章,但它的工作做得很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多