65.9K
CodeProject 正在变化。 阅读更多。
Home

ASP.NET MVC 6 新文件夹结构

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.76/5 (6投票s)

2016年4月9日

CPOL

5分钟阅读

viewsIcon

20322

本文介绍 ASP.NET 5 配合 MVC 6 的新文件夹结构

引言

本文将介绍 ASP.NET 5 中引入的新概念。
ASP.NET 5 引入了一些在以前版本的 ASP.NET 中不存在的概念。开发人员现在可以使用专门用于特定目的的文件和文件夹,而不是处理 web.configpackages.config 以及存储在 .csproj/.vbproj 文件中的各种项目属性。

新文件夹结构

Startup.cs

在以前版本的 ASP.NET 中,我们必须使用 web.config 文件或 *.config 文件来进行配置。很高兴听到 web.config 已经消失了。:). ASP.NET 5 现在可以配置本身。这对开发人员来说是个好消息,因为配置创建起来非常麻烦。

Microsoft 现在支持 JSON、XML 和 INI 文件进行配置,您可以轻松创建自己的文件。在 ASP.NET 5 中,“配置”主要在 Startup.cs 文件中的代码完成。您想在应用程序中启用的任何内容都在这个类中完成。您安装的任何包,都需要在 Startup.cs 文件中选择使用它。但在某些情况下,可能需要更新/转换配置文件……这可能是由于包的升级。好消息是,ASP.NET 5 中的配置源是可写的 (IConfigurationSource),这意味着在启动或首次访问配置时,您可以检测到需要更新的内容以支持您的新版本,并在代码中进行更新并提交 (ICommitableConfigurationSource) 更改。

 public Startup(IHostingEnvironment env)
        {
            // Set up configuration sources.

            var builder = new ConfigurationBuilder()
                .AddJsonFile("appsettings.json")
                .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

            if (env.IsDevelopment())
            {
                // For more details on using the user secret store 
                // see http://go.microsoft.com/fwlink/?LinkID=532709
                builder.AddUserSecrets();

                // This will push telemetry data through Application Insights pipeline faster, 
                // allowing you to view results immediately.
                builder.AddApplicationInsightsSettings(developerMode: true);
            }

            builder.AddEnvironmentVariables();
            Configuration = builder.Build();
        }
................

project.json

project.json 是另一个 JSON 文件。它用于定义项目的服务器端依赖项以及其他项目特定的信息,例如 usersecretsid 来标识您应用程序的唯一性、应用程序版本等。

服务器端依赖项指的是已安装的 NuGet 包或其他项目。每个入口包版本都可以单独指定。这是它提供的避免拉取主版本到次版本更新的最佳功能。这在部署项目时非常麻烦。

{
  "userSecretsId": "aspnet5-WebApplication1-8479b9ce-7b8f-4402-9616-0843bc642f09",
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions" : "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { },
    "dnxcore50": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ],
  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
  }
}

appsettings.json

正如我们所见,web.config 被 JSON 文件取代,appsettings.json 文件可以在其中指定数据库连接字符串。在 web.config 文件中,我们使用 <ConnectionString> 来配置连接字符串,在这里它将以 JSON 格式的字符串形式来指定连接字符串。

{
  "ApplicationInsights": {
    "InstrumentationKey": ""
  },
  "Data": {
    "DefaultConnection": {
      "ConnectionString": 
	"Server=(localdb)\\mssqllocaldb;Database=aspnet5-MVC6VNext-d6155af6-412a-4c71-8378-ae3c4ddbe2ed;
	Trusted_Connection=True;MultipleActiveResultSets=true"
    }
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Verbose",
      "System": "Information",
      "Microsoft": "Information"
    }
  }
}

global.json

global.json 用于配置解决方案。以前的 .sln 现在被 global.json 文件取代。默认情况下,项目和 SDK 是文件中提到的两个部分。

版本很重要,因为您的计算机可以安装多个版本的 dnx.exe。您可以使用此命令查看 %USERPROFILE%\.dnx\runtimes。已安装多个版本的 dnx。“sdk”部分 global.json 定义了您安装的一个运行时中的 dnx.exe 版本。

理解 global.json 的“projects”部分很重要,因为它将扫描每个目录下的任何级别的所有同级文件夹。

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

wwwroot 文件夹

wwwroot 文件夹是 ASP.NET 5 的新特性,用于存储项目中所有静态文件。任何发送到用户浏览器(包括 HTML 文件、CSS 文件、图像文件和 JavaScript 文件)的文件都应存储在此文件夹中。

代码文件应放在 wwwroot 之外,包括 C# 文件和 Razor 视图。拥有 wwwroot 文件夹可以清晰地区分代码文件和静态文件,它使将要发送到服务器的项目和应该保留在开发机器上的项目更加清晰。

依赖文件夹 (客户端依赖项管理)

在此文件夹中,我们可以找到另外两个文件夹

  1. 鲍尔

    如今,大多数 Web 应用程序都使用 JavaScript 和 CSS 框架,例如 jquery、bootstrap、angularJs 等。使用其他框架的前端开发人员更可能使用一个称为 Bower 的系统,这是一个专门用于管理 GitHub 上的客户端库的包管理器。Bower 由 Twitter 团队(也是 Bootstrap 的开发者)开发,是一个 Node.js 应用程序。

  2. NPM

    以前版本的 ASP.NET 包含一个用于最小化和捆绑客户端脚本和样式表文件的框架 - System.Web.Optimization。顾名思义,它依赖于 System.Web,因此不包含在 ASP.NET 5 中。ASP.NET 团队没有重复造轮子,而是决定采用一个流行的 Node.js 应用程序来执行这些任务 - Gulp。

    Gulp 被描述为一个构建系统或任务运行器,您可以使用它来自动化文件复制、捆绑和最小化、将 LESS 或 SASS 编译为 CSS 等作为构建的一部分。还有其他 Node.js 任务运行器可用,但 ASP.NET 团队选择 Gulp 作为 Visual Studio 中包含的选项之一。它在处理文件时使用流,这比创建临时副本更有效。您可以使用 npm 获取 Gulp,npm 是 Node.js 附带的一个包管理器。

引用 (服务器端依赖项管理)

References 文件夹显示在 Visual Studio 的解决方案资源管理器中,它详细介绍了项目的服务器端引用。ASP.NET 开发人员应该很熟悉它,但它已得到修改,以区分不同框架目标的引用,例如完整的 DNX 4.5.1 与 DNX Core 5.0。在每个框架目标中,您都会找到单独的引用,图标指示引用是程序集、NuGet 包还是项目。这些依赖项在编译时进行检查,并将缺失的依赖项从配置的 NuGet 包源下载。

© . All rights reserved.