Visual studio 2015 在nuget/.NET Core时代使用多个解决方案和文件引用
背景 我正在开发一个由数十个解决方案组成的大型应用程序,每个解决方案都包含许多项目。解决方案中项目之间的引用是使用项目引用完成的。其他解决方案中项目之间的引用使用对公共共享“bin”目录的文件引用。我们通过以下方式做到这一点:Visual studio 2015 在nuget/.NET Core时代使用多个解决方案和文件引用,visual-studio-2015,nuget,asp.net-core,visual-studio-debugging,.net-core,Visual Studio 2015,Nuget,Asp.net Core,Visual Studio Debugging,.net Core,背景 我正在开发一个由数十个解决方案组成的大型应用程序,每个解决方案都包含许多项目。解决方案中项目之间的引用是使用项目引用完成的。其他解决方案中项目之间的引用使用对公共共享“bin”目录的文件引用。我们通过以下方式做到这一点: 以正确的顺序构建解决方案(我们有自己的定制方式来确保这一点) 将所有类库程序集的输出位置配置为生成到共享的“bin”目录中 使用依赖这些类库程序集的项目中的文件引用来引用这些类库程序集 所有内容都在一个大型存储库中,并在一起进行分支/版本控制 这对我们来说非常有效,并允许
- 我们是否误解了“自由包装”方法的工作原理?
- 是否可以使文件引用的nuget包可调试?
- 是否有更像我们过去所做的替代方法?
.csproj
和xproj
项目协同工作。到现在为止,你可以看看“这是怎么做到的”
是否可以使文件引用的nuget包可调试
使用ASP.NET Core 1.0,您可以通过project.json
作为依赖项引用当前解决方案之外的项目。正如您所知,您可能缺少的是,通过这些引用,您可以从本地文件系统而不是DNX解析它们
使用解决方案中的global.json
,您可以添加项目目录,在尝试通过NuGet/DNX解析之前,Visual Studio将使用这些目录进行查找
示例
{
"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
中调用的任何一个项目,它将把这些项目拉到解决方案资源管理器中,并像对待“虚拟项目”一样对待它们,但实际上您仍然能够调试(并逐步执行)和更改它们,并且它们作为源代码管理的一部分进行跟踪
是否有一种更像我们过去所做的替代方法
我在上面描述了您应该做什么,采用global.json
方法。如果您希望保持解决方案干净且彼此独立,建议您将依赖项添加为NuGet包。但是,在处理多个解决方案并频繁重建它们时,您将面临一个恼人的障碍:NuGet包缓存。本质上,您需要的是在每次进行某些修改时逐步调整项目的版本号,以便不同解决方案中的依赖项目可以获得更新。为此,我编写了一个简单的dotnet工具,您可以使用它在每个版本上逐步确定项目的修订号:
工作起来很有魅力,您只需更新引用项目中的NuGet包。当然,在发布项目时,您会逐步调整主/次/补丁号,并将修订设置回0。听起来您需要自己的nuget提要。它可以像网络共享一样简单。您应该知道ASP.NET核心类库(在Visual Studio中称为“类库(包)”)生成nuget包,而不仅仅是像旧版那样的普通dll。您基本上希望构建这些类库中的每一个,并将它们放在网络共享中