global.json和src文件夹有多重要?

时间:2015-07-22 14:26:16

标签: asp.net-core-mvc

在VS 2015中,使用此方法创建新的MVC 6.0应用程序时:

 File-->New-->Project-->Other Project Types-->Visual Studio Solutions-->Blank Solution

您最终在磁盘上拥有以下文件结构:

  • 伪影
  • SRC
  • MyProject.sln
  • global.json

相反,如果我决定首先创建一个空白解决方案:

global.json

开始向此解决方案添加新的ASP.NET Web应用程序项目;您最终拥有 没有 src文件且没有projects文件夹的文件结构。

根据documentation,global.json文件用于整体配置解决方案。它默认只包含两个部分,项目和sdk。

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

global.json属性指定Visual Studio在打开解决方案时将使用的DNX(.Net Execution Environment)版本。它设置在这里,而不是在project.json中,以避免解决方案中的不同项目针对不同版本的SDK的情况。

问题1)

如上所述,如果我选择首先创建一个空白解决方案,我将不会有global.json个文件。

没有global.json文件影响应用程序的任何形状或形式的行为?例如,当我部署或与构建工件交互时?

问题2)

如果确实有影响,那么我应该手动创建这个global.json文件吗?

问题3)

在撰写本文时,是否有建议的方法在ASP.NET 5中创建多层应用程序?

我应该首先创建MVC项目并开始向项目添加类库吗?

或者

我应该首先创建一个空白解决方案并开始将类库和Web应用程序添加到解决方案中(知道我不会有src文件或{{1}}文件夹)?

3 个答案:

答案 0 :(得分:1)

srctest等文件夹允许您按类型对项目进行分组。这有助于在存在大量项目时保持解决方案的可维护性。以下是已提出的各种项目类型的example

根据ASP.NET Core Engineering Guidelines:“默认情况下,项目到项目的引用必须是兄弟文件夹。使用global.json文件允许解决方案指定非标准位置来定位引用。”

总而言之,如果有很多项目,您可以按类型将它们分组到文件夹中,并使用global.json允许一个组中的项目引用另一个项目中的项目。

答案 1 :(得分:1)

1)是的,对我来说,我也遇到了这个问题,并从空白解决方案开始。然后我的项目引起了彼此引用的问题。

2)对我来说,没有global.json就行不通。您还需要确保解决方案文件正确指向所有内容,例如global.json。 这些项目没有建立,也没有为我找到对方。

3)为了让一切正常,我首先创建了一个mvc核心项目来获取global.json文件。然后我将scr文件夹重命名为applicationname.web。确保相应地更改解决方案文件,以免出错。您还应该更新project.json文件。 这样,你想要一个像你这样的空白解决方案,我创建了一个默认项目,然后将其改为我想要的方式,这对我有用。

我将使用Onion Architeture作为指导来构建我当前的应用程序。我认为没有问题与核心这样做。这也意味着我将在一个不同的项目(可能名为infrastructure.IoC)中构建IoC,这样我的Web项目就不会包含对包含Web不应该知道的接口实现的项目的引用。

另外,如果你仍然有问题,我实际上有本地构建和引用问题,因为我有resharper并且我关闭了,然后项目之间的引用问题消失了,我可以成功构建。

答案 2 :(得分:-2)

正如您所指出的,这似乎是在定位ASP.NET 5时创建解决方案的新方法.lobal.json文件指定了一些解决方案级别的设置。特别是,它定义了DNX runtime settings

我见过src / test文件夹结构的两种方法。如果查看MVC team is doing的内容,它们会将src / test文件夹合并到存储库根目录中。许多项目,例如Github在根目录中有一个src目录。因此,只要您在项目的根目录中使用global.json和解决方案文件,它就可以与现有实践保持一致。

如果你看看.NET团队正在使用.NET 5 Core Framework做什么,你会看到一个类似的模式,虽然没有global.json文件。他们的许多库都有src和 tests 子目录。

我将尝试在MVC团队目前正在做的事情之后模拟我的项目,直到我对.NET 5,DNX和其他人有更好的理解。它确实在你的项目上施加了某种结构,但VS 2013和.NET 4.5也是如此。