visual-studio-2015 - 在 nuget/.NET Core 时代使用多种解决方案和文件引用

标签 visual-studio-2015 nuget asp.net-core visual-studio-debugging .net-core

背景

我正在开发一个由数十个解决方案组成的大型应用程序,每个解决方案包含多个项目。解决方案中的项目之间的引用是使用项目引用完成的。其他解决方案中的项目之间的引用使用对公共(public)共享“bin”目录的文件引用。我们通过以下方式做到这一点:

  1. 按照正确的顺序构建解决方案(我们有自己的自定义方法来确保这一点)
  2. 配置所有类库程序集的输出位置以构建到共享“bin”目录中
  3. 使用依赖于它们的项目中的文件引用来引用这些类库程序集

所有内容都在一个大存储库中,并且一起进行分支/版本控制。

这对我们来说效果很好,使我们能够轻松地在解决方案之间引用代码。在依赖的解决方案中更改代码、重建它,然后立即将该更改可用于依赖它的解决方案,这也是相对轻松的。例如,由多个应用程序使用的实用程序库。

问题/问题

我们目前正在寻求添加新的 ASP.NET Core 1.0 RC1 项目/解决方案(使用 .NET Framework 4.6.1,而不是 .NET Core),并且需要引用 ASP.NET Core 项目解决方案之外的程序集。

如果我们将 ASP.NET Core 项目中的文件引用添加到共享“bin”目录中的程序集,它似乎可以工作,但会发生的情况是 .dll 被复制到 ASP 根目录中的 lib 目录中.NET Core 项目的解决方案目录。由于此文件是副本,并且没有返回原始位置的链接,因此这意味着不会拾取对程序集的任何后续更改。除非引用被删除并重新添加。也许我做错了什么,但是这种 lib 和包装目录方法不适用于我们的用例。

鉴于 nuget 似乎是添加引用的首选方式,我们也尝试了这种方法。我们有一个构建脚本,它为共享“bin”目录中的每个程序集创建一个 nuget 包,并将它们存储在存储库根目录的目录中,我现在可以将这些程序集引用为 nuget 包,然后经过一些操作重建/重新打包更改然后由相关项目拾取。因为整个存储库是一起“版本化”的,所以不需要对程序集/包进行任何版本化 - 一切都在 1.0.0 上。这在某种程度上违背了 nuget 的观点,但它在我们应用程序的架构中根深蒂固,不容易改变。

虽然 nuget 方法感觉有点尴尬,但它似乎确实有效。但是,调试器不再找到/使用 pdb 文件,即使它们包含在 nuget 包中。这是生产力的巨大损失。

  • 我们是否误解了“lib and wrap”方法的工作原理?
  • 是否可以使文件引用的 nuget 包可调试?
  • 是否有更类似于我们以前所做的替代方法?

最佳答案

Are we misunderstanding how the "lib and wrap" approach works?

“lib and wrap”实际上并不成熟。我认为 RC2 有望让 .csprojxproj 项目协同工作。截至目前,您可以查看@如何EF project这样做。

Is it possible to get file referenced nuget packages to be debuggable?

使用 ASP.NET Core 1.0,您可以通过 project.json 作为依赖项引用当前解决方案之外的项目。正如您所知,您可能缺少的是,通过这些引用,您可以从本地文件系统而不是DNX解析它们。

使用解决方案中的 global.json,您可以添加 Visual Studio 在尝试通过 NuGet/DNX< 进行解析之前将用于查找的项目目录/strong>.

示例

{
  "projects": [
    "src",
    "test",
    "../Some.Other.Project/src", // Will look here for projects
    "../../Some.External.Project/src" // Will look here for projects
  ],
  "sdk": {
    "version": "1.0.0-rc1-update1"
  }
}

srctest 目录是标准模板放置源项目和测试项目的默认目录。

然后,如果您依赖于 global.json 中调用的任何一个项目,它会将这些项目拉入解决方案资源管理器,并将它们视为“虚拟项目”,但实际上您仍然可以调试(并单步调试它们)并更改它们,并且它们将作为源代码控制的一部分进行跟踪。

Is there an alternative approach that would be more like what we used to do?

我在上面描述了您应该做什么,采用 global.json 方法。

关于visual-studio-2015 - 在 nuget/.NET Core 时代使用多种解决方案和文件引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209904/

相关文章:

razor - 如何在 Visual Studio 2015 中编写多行属性?

c# - 强制 Nuget 包使用特定版本的子依赖项?

nuget - 指定 Octopack nuget 包文件的目标路径

c# - 从 git checkout 后 nuget dll 丢失

asp.net-core - ASP.NET 5 中的 Azure Web 作业

c# - 不使用 ASP.Net Core 2 中的迁移命令 Update-Database 创建数据库

android - 如何从 Visual Studio 2015 运行 Xamarin Android Player?

c# - 在哪里可以找到 MSBuild 14.0 x64

javascript - Visual Studio 2017 是否支持 _references.js 文件?

asp.net-core - 没有找到匹配命令 dotnet-projectmodel-server, VS2015 的可执行文件