背景
我正在开发一个由数十个解决方案组成的大型应用程序,每个解决方案包含多个项目。解决方案中的项目之间的引用是使用项目引用完成的。其他解决方案中的项目之间的引用使用对公共(public)共享“bin”目录的文件引用。我们通过以下方式做到这一点:
- 按照正确的顺序构建解决方案(我们有自己的自定义方法来确保这一点)
- 配置所有类库程序集的输出位置以构建到共享“bin”目录中
- 使用依赖于它们的项目中的文件引用来引用这些类库程序集
所有内容都在一个大存储库中,并且一起进行分支/版本控制。
这对我们来说效果很好,使我们能够轻松地在解决方案之间引用代码。在依赖的解决方案中更改代码、重建它,然后立即将该更改可用于依赖它的解决方案,这也是相对轻松的。例如,由多个应用程序使用的实用程序库。
问题/问题
我们目前正在寻求添加新的 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 有望让 .csproj
和 xproj
项目协同工作。截至目前,您可以查看@如何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"
}
}
src
和 test
目录是标准模板放置源项目和测试项目的默认目录。
然后,如果您依赖于 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/