今日读书笔记(未整理):
1.控制IIS使用1.1还是2.0的工具名字叫做MMC Snapin一刚。同时可以选择“编辑配置”,其实即使对Web.config的可视化设置。
2.aspnet_regiis命令重提,-i参数还是很重要的,再有就是对web.config和app.config敏感信息进行加密。
3.aspnet_regsql将账号注册放入统一SQLServer中,参数配制用的时候再查。
4.ASP.NET 1.1和2.0比较:web.config中字段的变化,同时读取该值的方法也变了:
ASP.NET 1.1机制:两种读法
using
System.Configuration;
//
方法1
AppSettingsReader configurationAppSettings
=
new
AppSettingsReader();
string
connectionString
=
(
string
)(configurationAppSettings.GetValue(
"
ConnectionString
"
,
typeof
(
string
)));
//
方法2
string
connectionString
=
ConfigurationSettings.AppSettings[
"
ConnectionString
"
];
ASP.NET 2.0机制,废弃了
ConfigurationSettings:
/**/
/*针对同一web.config,分别读取appSettings或connectionStrings
<configuration>
<appSettings>
<add key="ConnectionString1" value="连接字符串"/>
</appSettings>
<connectionStrings>
<add name="ConnectionString2" connectionString="连接字符串2" providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
*/
//
方法1
string
connectionString1
=
ConfigurationManager.AppSettings[
"
ConnectionString1
"
];
//
方法2
string
connectionString2
=
ConfigurationManager.ConnectionStrings[
"
ConnectionString2
"
].ConnectionString;
5.web.config的加解密机制,特别针对数据库连接字符串,同样适用App.config:
假定项目名称"MyConfiguration",则
加密:aspnet_regiis -pe "加密字段" -app "/MyConfiguration" -prov "具体加密方式的Provider"
解密:aspnet_regiis -pd "加密字段" -app "/MyConfiguration"
记住,程序员读取字段时不需要额外解密,系统在你读取前会解密。
另一种加密机制是在程序里使用API。
6.ASP.NET特殊文件夹
App_Browsers
App_Code
App_Data
App_GlobalResources
App_Themes
这些文件夹下的程序,只允许Application访问,不支持Request(无法存取)。
每个文件夹都回生成一个dll。
7.代码段 Code Snippets
这是一个好东西,会使我变懒的,连for循环都不用自己敲了。
记住组合键(Ctrl + K,Ctrl + B),可以Manage你的Code Snippets
8.Refactoring
这也是个BT的东西,虽然做的没Resharper好。
选取一段代码抽象为方法,但是只能将选中的进行转换,如果旁边有同样的一段代码,vs2005也会看不见而不会处理(我亲自测的)
。
重命名任何成员(字段,参数,方法等等)。
将字段封装为属性(属性名字你自己取)。
移除参数,从方法、索引器或委托中移除参数,不会动方法中的同名参数,这样肯动会有语法错误。
重新排列参数,也是局限于方法、索引器或委托中的参数。
提取接口,基于类中的非静态方法,生成接口文件。
将局部变量提升为参数,如下图,将光标移到变量i,操作该命令:
//
处理前
public
static
void
MethodB()
{
// Invoke on 'i'
int i = 0;
}
//
处理后
public
static
void
MethodB(
int
i)
{
// Invoke on 'i'
}
补注:查了查微软的在线MSDN,他是这么说的,结合上图,就明白了:
将局部变量提升为参数,提供一种简单的方法,以在正确更新调用站点的同时将变量从局部使用移动至方法、索引器或构造函数参数。调用“将局部变量提升为参数”操作时,变量将被添加到成员参数列表的结尾处。对已修改成员的所有调用都将使用新参数(将替代最初赋给该变量的表达式)立即进行更新,并保留代码,以使其像变量提升之前那样正常工作。将常数值赋值给提升的变量时,此重构操作的效果最好。必须声明并初始化该变量而不能仅声明或仅赋值。
9.动态编译dll组件
1.1只止持aspx,ascx,web.config和global.asax的动态编译,并不支持dll和WebServices,要手动编译并重新添加dll引用——2.0现在支持了,但是在bin目录下却不生成自身项目的dll了。现在的原则是,只要用户进行请求,系统会自动进行动态编译。于是,对于正在使用的网站,增加一部分code并不需要编译,当请求当这个改动或新功能时,再进行动态编译,弹性就大了很多。也许你会说,第一次的速度会很慢,因为要编译嘛,但仅仅时新的代码块或者改动部分,其他不动模块不许要编译的,所以速度不受影响。
10.预编译
这就是编译后有dll的版本,和1.1结构一样了(虽然还差解决方案)
三种方式,同演的效果:
命令行方式 Aspnet_Compiler加参数
IDE中的“发布网站”选项
通过API编程实现,这是以上两种方式的实际运作,代码如下:
using
System.Web.UI.HtmlControls;
ClientBuildManager cbm
=
new
ClientBuildManager(
"
虚拟目录名称
"
,
"
来源位置
"
,
"
目标位置
"
);
cbm.PrecompileApplication();
注意,预编译后生成的dll是不支持动态编译的
11.同时使用C#和VB.NET在同一个项目中:
web.config配置如下:
<
configuration
>
<
system.web
>
<
compilation
>
<
codeSubDirectories
>
<
add directoryName
=
"
cs
"
/>
<
add directoryName
=
"
vb
"
/>
</
codeSubDirectories
>
</
compilation
>
相应在App_Code下加入cs和vb两个folder,分别存放cs和vb格式的文件(不加是不行的,因为在web.config中已经配置了这两个folder)
这样,预编译后在bin目录中,分别生成App_SubCode_cs.dll和App_SubCode_vb.dll两个dll组件。
12.CodeBehind
旧的CodeBehind是这样的(1.1版本):
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeBehind
=
"
~/Default.aspx.cs
"
Inherits
=
"
命名空间.类
"
%>
新的CodeBehind(2.0版本,又名CodeBeside):
<%
@ Page Language
=
"
C#
"
AutoEventWireup
=
"
true
"
CodeFile
=
"
~/Default.aspx.cs
"
Inherits
=
"
类
"
%>
比较可知,2.0版本不再需要命名空间,而CodeBehind关键字也改为CodeFile了。
13.VS2005 SP1
也就是升级包,支持生成proj文件的,使vs2003时代的程序员可以有回到过去的风格,而不是操作文件系统,同时namespace也回来了,这样App_Code的特殊文件夹就失去了意义,其下的cs文件要重新放位置了,还有就是,在升级包下建立的aspx文件,同时不但可以看到aspx.cs文件,这个文件负责记录逻辑操作,还有一个aspx.design.cs文件,只负责声明那些控件变量——二者是一个类拆成两部分(partial类),前者给开发者使用,后者自动生成,不建议改动。