1. 综述
大多数程序里都会在Web.config里设置參数,而且在部署的时候须要更改。
每次都手工更改这些配置非常乏味,也easy出错。
该章节将会告诉你假设通过自己主动化更新Web.config文件来避免这些问题。
2. Web.config Transformations 与Web Deploy Parameters
有2种方式来自己主动化更新Web.config文件的设置:Web.config transformations和Web Deploy parameters。
Web.config transformation文件包括部署时须要更新的XML标记 。
你能够为不同的build配置声明不同的更新。默认的build配置是Debug和Release。你也能够创建自己定义的build配置。
Web Deploy parameters能够定义部署时须要更的不论什么设置(仅仅要Web.config里能定义的)。定义Web.config文件更新的时候,创建Web Deploy parameters十分复杂,可是假设你仅仅有在部署的时候才知道这些配置值的话。它是很实用的。比如,在一些企业环境里。你将程序打包以后发给IT部门的人去安装到生产环境,IT的人须要输入字符串连接或者不能让你的password。
该章节的内容,不论什么东西你都能够事先在Web.config里配置好。所以不须要使用Web Deploy parameters的方式。
提醒:假设依据本章节所做的操作出现错误信息或一些功能不正常的话,请务必check Troubleshooting页面。
3. 创建新的Build Configuration
你有2个须要部署的目标:測试环境和生产环境。
部署到測试环境的话一般都是部署Release版本号而非Debug版本号,可是有些Web.config的參数可能和生产环境里的不一样。由于Web.config transformations是由build配置来声明的,所以你须要创建一个新的test环境使用的build配置。
生产环境使用默认的Release build配置,測试环境假设你能用debug的话也能够使用默认的Debug build配置。假设须要在測试环境部署Release版本号的程序的话,你能够创建一个Test build配置。
打开Visual Studio Build菜单。选择Configuration Manager弹出Configuration Manager对话框。
在Active solution configuration框里,选择新建New。弹出New Solution Configuration对话框,输入"Test"作为新build配置的名称。然后选择从Release复制设置。
保存Create new project configurations选中,然后点击OK。
关闭Configuration Manager对话框。
还须要一个Web.config transform文件来相应Test build配置。
在Solution Explorer里,展开Web.config 文件能够看到默认创建的Web.Debug.config和Web.Release.config文件,右键Web.config 然后选择Add Config Transforms。
Web.Test.config文件加入成功。
如今,你能够输入Web.config transformations到Web.config transformation文件了。
4. 防止Entity Framework Code First删除生产环境数据库
在开发环境,Entity Framework Code First通常默认配置成当data model改变的时候自己主动删除/重建数据库。在你开发网站和频繁改变data model的时候很方便,可是你肯定不想它发生在生产环境。
控制Entity Framework 自己主动初始化数据库的功能的推荐方法是:在Web.config 文件中设置appSettings值。
(早期的Code First教程建议在Global.asax文件的Application_Start方法里设置代码,假设你有这种代码,部署之前删除它。由于不须要改变项目就能够控制Code First行为,比如。你能够配置一个測试项目来做数据库初始化。)
Web.config文件的appSettings
里设置了一个DatabaseInitializerForType
。
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"
value="ContosoUniversity.DAL.SchoolInitializer ContosoUniversity.DAL"/>
<!-- Other settings -->
</appSettings>
你须要为部署网站的配置改动value的属性值为"Disabled"。例如以下:
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"
value="Disabled"/>
<!-- Other settings -->
</appSettings>
打开Web.Release.config马上加入一个新的appSettings元素。例如以下(确保仅仅加入appSettings元素)。
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"
value="Disabled" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
<!-- Existing comments and system.web element -->
</configuration>
xdt:Transform属性值"SetAttributes" 的意思是当前transform的目的是更新Web.config文件已经存在的元素。
xdt:Locator属性值"Match(key)"的意思是须要更新的元素的key属性和当前声明的key属性是一样的,另外一个value的值才是须要在部署Web.config 文件中改动的值。这段代码将会让Entity Framework Code First初始化器设置为"Disabled"。
假设測试环境和生产环境都使用一样的配置。也就是仅仅能开发环境自己主动创建数据库,因此你须要在Web.Test.config文件加入相同的代码。(不须要更新Web.Debug.config文件。由于该章节不会创建不论什么Debug build)。
5. 限制错误日志訪问(仅仅授权给Administrators)
假设程序执行的时候又错误,程序会显示一个普通的错误信息(取代系统黄页),使用Elmah NuGet包来处理错误日志记录和报表。 Web.config文件的customErrors 元素声明了错误页地址:
<customErrors mode="RemoteOnly" defaultRedirect="/GenericErrorPage.aspx">
<error statusCode="404" redirect="/GenericErrorPage.aspx"/>
</customErrors>
要看该错误页面,能够暂时设置customErrors元素的mode值为"On"然后从Visual Studio里执行程序。输入非法的URL地址(比如Studentsxxx.aspx),你能够看到替代"page not found" 错误页面的自己定义错误页GenericErrorPage.aspx页面。
查看错误日志,在port后面输入elmah.axd(截图的样例是:http://localhost:51130/elmah.axd)就能够訪问:
看完以后,不要忘记把customErrors元素的mode值又一次设置为"RemoteOnly" 。
开发环境能够随意訪问错误日志页面。但生产环境可能是个安全风险,对于生产环境你能够通过在Web.Release.config文件中使用一个添transform来限制认证仅仅有administrators才干够訪问。
打开Web.Release.config,在appSettings元素后面加入以下的代码:
<location path="elmah.axd" xdt:Transform="Insert">
<system.web>
<authorization>
<allow roles="Administrator"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
xdt:Transform属性值"Insert"的意思是加入该元素到Web.config的其它同类型节点以下作为兄弟节点。(已经有一个location元素来声明Update Credits页面验证规则了。
)。生产环境部署以后,你须要測试该验证是否有效。
你不须要限制測试环境的错误日志訪问权限,所部须要设置Web.Test.config文件。
安全备注:不论什么时候都不应该在生产环境显示和保持错误日志信息,黑客可能会利用网站的漏洞还获取这些信息。
假设你使用ELMAH,确保配置成最小风险。该演示里的ELMAH配置不能被觉得是一个推荐配置。它仅仅是一个样例方便我们展示怎样控制一个目录的权限。
6. 设置环境标示符
常见的常见是不同的环境使用不同的配置。比如。一个程序调用WCF,那不同的环境可能调用的endpoint地址不一样。Contoso University程序也有类似的。
设置一个网站标示符有助于用户能够非常方便的知道当前你在訪问哪个环境的网站。Site.Master 模板文件中会显示附件了标示符(Dev或Test)的head标题。
生产环境执行的时候,标示符将被禁掉。
Contoso University程序页面读取Web.config文件中的appSettings的一个值来决定当前执行的程序是哪个环境:
<appSettings>
<!-- Entity Framework initializer setting -->
<add key="Environment" value="Dev"/>
</appSettings>
这个value值在測试环境应该是“Test”。生产环境应该是“Prod”。
打开Web.Release.config文件,加入例如以下代码到appSettings元素节点:
<appSettings>
<!-- Entity Framework initializer transform that you entered earlier -->
<add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
Transform和Locator属性和前面为Entity Framework创建的transform类似。
完毕以后,Web.Release.config的appSettings应该是这个样子:
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"
value="Disabled" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
<add key="Environment" value="Prod" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
接着,相同的代码应用到Web.Test.config文件。仅仅是设置value值为"Test"。
完毕以后Web.Test.config 下的appSettings节点应该像这样:
<appSettings>
<add key="DatabaseInitializerForType ContosoUniversity.DAL.SchoolContext, ContosoUniversity.DAL"
value="Disabled" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
<add key="Environment" value="Test" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>
7. 禁用Debug模式
对于Release build。不须要开启debugging模式。
默认情况下Web.release.config transform文件是自己主动从compilation元素删除debug属性的。
由于你创建的Test build 配置是从Release复制的设置,所以Web.Test.config也有这个代码:
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)"/>
</system.web>
该Transform属性定义的是从部署以后的Web.config文件将debug属性删除。
8. 设置连接字符串
由于我们有2个版本号的数据库,一个开发环境,一个是測试和生产环境,你须要为測试和生产环境设置相对于开发环境不同的连接字符串。打开Web.Test.config和theWeb.Release.config文件后,在<configuration>里加入<connectionStrings>元素,例如以下:
<connectionStrings>
<add name="DefaultConnection"
connectionString="Data Source=|DataDirectory|aspnet-Prod.sdf"
providerName="System.Data.SqlServerCe.4.0"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
<add name="SchoolContext"
connectionString="Data Source=|DataDirectory|School-Prod.sdf"
providerName="System.Data.SqlServerCe.4.0"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
该代码使用的Match locator和SetAttributes transform属性和上面的环境标示符配置类似。
对于測试和生产环境的配置,我们都所有设置完了,下一章节,你将学会配置项目属性。
微软ASP.NET网站部署指南(3):使用Web.Config文件的Transformations的更多相关文章
-
微软ASP.NET网站部署指南(10):迁移至SQL Server
1. 综述 第2章的部署SQL Server Compact和第9章的部署数据库更新里解释了为什么终于要升级到完整版SQL Server .本章节将告诉你怎样来做. SQL Server Expre ...
-
微软ASP.NET网站部署指南(2):部署SQL Server Compact数据库
1. 综述 对于数据库訪问,Contoso University程序要求以下的软件必须随程序一起部署.由于不属于.NET Framework: SQL Server Compact (数据库引擎) A ...
-
微软ASP.NET网站部署指南(8):部署Code-Only更新
1. 综述 初始化部署以后,你须要继续维护和更新你的网站.本章节将向你展示一个不包含数据库改变的部署升级流程.(下一章节将展示数据库改变的部署升级流程.) 提醒:假设依据本章节所做的操作出现错误信息 ...
-
微软ASP.NET网站部署指南(4):配置项目属性
1. 综述 有些部署设置能够在项目属性里设置的,而且保持到项目文件中(.csproj或.vbproj). 大多数情况下.你都能够在Visual Studio 选择项目属性Project Proper ...
-
微软ASP.NET网站部署指南(9):部署数据库更新
1. 综述 无论什么时候,程序都有可能像代码更新一样更新数据库.本章节你将进行数据库改动,測试.然后部署到測试环境和生产环境. 提醒:假设依据本章节所做的操作出现错误信息或一些功能不正常的话,请务必 ...
-
ASP.NET网站部署CentOS操作笔记
ASP.NET 网站部署 Linux 服务器简要笔记 Mono 刚问世的时候,跑起来确实有很多不可预估的 BUG,但是被微软收购后推出的几个版本相对来说稳定了许多. 这几天使用了一个 n 年前用 We ...
-
asp.net网站部署在云服务器windows server 2008上
搭建一个网站需要以下4个准备: 1.域名解析 2.(云)服务器 3.数据库 4.网站代码 其中1可以可以去DNSPOD申请,同时需要进行备案,在上面就都可以完成.2用的是阿里云服务器windows s ...
-
ASP.NET 开发必备知识点(1):如何让Asp.net网站运行在自定义的Web服务器上
一.前言 大家都知道,在之前,我们Asp.net 的网站都只能部署在IIS上,并且IIS也只存在于Windows上,这样Asp.net开发的网站就难以做到跨平台.由于微软的各项技术的开源,所以微软自然 ...
-
ASP.NET Web.config文件的配置(Configuration API)
本次我们讨论主要聚焦在以下Web.config配置文件的设置值的读取. 1.<connectionString />连接字符串的读取. 2.<appSettings />应用程 ...
随机推荐
-
前端构建大法 Gulp 系列 (四):gulp实战
前端构建大法 Gulp 系列 (一):为什么需要前端构建 前端构建大法 Gulp 系列 (二):为什么选择gulp 前端构建大法 Gulp 系列 (三):gulp的4个API 让你成为gulp专家 前 ...
-
.net字符串Gzip压缩和base64string转换:
class Program { static void Main(string[] args) { //要压缩的字符串 string data = "13800138000,验证码:1234 ...
-
Android程序crash处理
Android程序crash处理 时间 2014-11-24 13:45:37 CSDN博客 原文 http://blog.csdn.net/allen315410/article/details ...
-
Android数据存储之sharedpreferences与Content Provider
android中对数据操作包含有: file, sqlite3, Preferences, ContectResolver与ContentProvider前三种数据操作方式都只是针对本应用内数据,程序 ...
-
采用DWR、maven保存数据到数据库
一.原理: Ajax是时下比较流行的一种web界面设计新思路,其核心思想是从浏览器获取XMLHttp对象与服务器端进行交互. DWR(Direct Web Remoting)就是实现了这种Ajax技术 ...
-
WinForm 布局,容器、打印和对话框控件
今天,我主要学习了容器控件.打印控件.对话框控件. 在正式进行今天的内容之前,首先补充了布局的两个属性:Anchor:锁定位置,Dock:填充位置,一般与容器控件配合使用. 之后,我学习了第一部分内容 ...
-
windows 2003添加删除windows组件中无iis应用程序服务器项的解决方法
解决方法如下: 1.开始 -- 运行,输入 c:\Windows\inf\sysoc.inf,会打开这个文件;在sysoc.inf中找到"[Components]"这一段,并继续找 ...
-
远程控制你的智能电视,按键|输入|安装App等都已实现,已开源!
一.序 Hi,大家好,我是承香墨影! 智能电视或者智能盒子,不知道大家了解多少? 这两年各大厂商生产的电视设备,基本上都是搭载的 Android 系统.既然电视本身就是 Android 系统的,我们也 ...
-
python笔记-1(import导入、time/datetime/random/os/sys模块)
python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...
-
TrinityCore3.3.5环境搭建
说起TrinityCore,可能知道的人不多,但是说起MaNGOS(芒果)知道的人应该就不少了.MaNGOS是一个魔兽私服服务器端,TrinityCore继承自TrinityCore并且做了优化,一直 ...