ASP.NET 5中Global.json中项目部分的说明

我注意到在创建一个新的ASP.NET 5项目时,有一个对我来说完全有意义的src目录,因为我总是将所有解决方案的代码放在一个名为source的目录中。

我注意到有一个名为global.json的文件,默认情况下包含以下内容:

{ "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-rc1-update1" } } 

我在ASP.NET 5文档中找到了以下内容: projects属性指定哪些文件夹包含解决方案的源代码。 默认情况下,项目结构将源文件放在src文件夹中,允许将构建工件放在兄弟文件夹中,从而更容易从源代码控制中排除这些内容。

但是,这里是我想到的项目结构(它基本上是我想在同一解决方案下的两个大项目):

 MySolution MySolutionProject1Src client p1.WebAPI business p1.Business p1.Model data p1.Repository test p1.BusinessTests p1.WebAPITests MySolutionProject2Src client p2.Web business p2.Business p2.Model data p2.Repository test p2.BusinessTests 

那么我会将global.json更新为以下内容吗? (每个父目录一个):

 { "projects": [ "MySolutionProject1Src", "MySolutionProject2Src" ], "sdk": { "version": "1.0.0-rc1-update1" } } 

或者应该是更像这样的东西(每个子目录一个):

 { "projects": [ "MySolutionProject1Src/client", "MySolutionProject1Src/business", "MySolutionProject1Src/data" "MySolutionProject1Src/test", "MySolutionProject2Src/client", "MySolutionProject2Src/business", "MySolutionProject2Src/data" "MySolutionProject2Src/test" ], "sdk": { "version": "1.0.0-rc1-update1" } } 

或者我应该只是将其保留为“src”并将所有内容作为子文件夹放在src下面。

我假设我可以创建我想要的任何解决方案结构,但我关注的是更新global.json项目部分以匹配它时要遵循的规则。 根据文档,它表示将为global.json中指定的每个路径创建一个工件文件夹。 所以我想知道我是否需要为解决方案中的每个项目创建一个工件文件夹,或者只需要一个外部的大项目。

首先,我将转发给描述global.json 的文档部分 。

 { "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-beta5", "runtime": "clr", "architecture": "x86" } } 

version (以及可选的runtimearchitecture )很重要,因为您的计算机有多个版本的dnx.exe 。 您可以检查%USERPROFILE%\.dnx\runtimes目录以查看所有已安装的运行时。 global.json"sdk"部分定义了您安装的其中一个运行时的dnx.exe版本。

了解global.json "projects"部分非常重要,它将扫描目录下每个级别下的所有兄弟文件夹 。 将找到的每个project.json都将被解释为解决方案的项目。

例如,您可以下载ASP.NET的某些部分并将其放在解决方案层次结构的新子文件夹中。 例如,您可以下载entity framework7的RC1源( 文件 ),任何解压缩项目的src文件夹内的新ef文件夹中的zip文件。 您将看到,在重新打开解决方案后的短时间内,项目列表将越来越长,所有Entity Framework 7组件都将包含在您的解决方案中。 以同样的方式,您可以在单独的目录C:\aspnet\EF7提取下载的源并使用

 { "projects": [ "src", "c:/aspnet/EF7" ], "sdk": { "version": "1.0.0-rc1-update1" } } 

你会有同样的效果。 如果您以后决定删除调试Entity Framework 7的源代码,那么您应该从global.json排除"c:/aspnet/EF7" ,然后在Visual Studio中删除以前添加的项目,方法是在“解决方案视图”中选择并单击Del键。

我认为它应该清除你在文件夹结构中的可能性。

另一个非常重要的可选文件,可以存在于解决方案层次结构中,是NuGet.config文件。 它定义了NuGet feed,它将加载包。 问题是有许多 NuGet存储库(请参阅答案 ),它们具有不同的ASP.NET 5组件初步版本 。 如果您使用完全相关的依赖项

 "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 

然后需要在NuGet存储库中拥有显式版本。 问题是有时候会使用依赖性

 "EntityFramework.MicrosoftSqlServer": "7.0.0-*" 

加载包的最新版本。 如果您使用错误的NuGet feed,那么您可以获得早期的RC2构建,这与其他RC1软件包不兼容(至少因为在beta版本之间重命名了许多组件)。 为了确保您的解决方案(所有项目)都使用RC1,您可以将以下NuGet.config放在解决方案文件夹中(在所有项目之上),例如以下内容

                 

请参阅文档 。 我建议你在某个项目文件夹中打开命令行并执行

 dnu feeds list 

命令。 它将显示当前和父文件夹以及全局文件%appdata%\NuGet\NuGet.Config将被合并 。 NuGet将在所有活动存储库中搜索包。 在上述情况下,它将是https://api.nuget.org/v3/index.json和https://www.myget.org/F/aspnetmaster/api/v3/index.json 。

可能的冲突可能是存在多个NuGet.config ,指向不同的NuGet提要或启用/禁用某些提要。 命令dnu feeds list在这里有帮助。 您应始终扫描项目层次结构中的所有NuGet.config文件以防止/解决冲突。 许多冲突的解决主要包括使用正确的提要或使用显式版本来解决包。

我建议您阅读描述NuGet配置inheritance 的文章 。

我希望您可以决定哪种结构对您现有的环境更好。 我建议你保持标准结构

 solution src project folderWithProjects 

并将global.jsonNuGet.config放在解决方案目录中。 测试项目的默认位置:与主项目分开:

 solution src project folderWithProjects test testproject1 testproject2 

(您可以在此处检查GitHub或MVC6上的Entity Framework 7的结构)。 您可以按照结构或选择其他位置并修改global.json "projects"部分。

更新:微软在RC1和RC2之间做了很多改动。 Dnx.exe将不再用于ASP.NET Core。 一个人应该使用dotnet.exe 。 new / modified global.jsonproject.json的描述尚未完整记录。 您可以在此处查看文档的初步版本。 旧文档上的链接(在https://docs.asp.net/en/latest/dnx下)现已破坏。