以下以 IE 代替 Internet Explorer,以 MF 代替 Mozzila Firefox
1. document.form.item 问题
(1)现有问题:
现有代码中存在许多 document.formName.item("itemName") 这样的语句,不能在 MF 下运行
(2)解决方法:
改用 document.formName.elements["elementName"]
(3)其它
参见 2
2. 集合类对象问题
(1)现有问题:
现有代码中许多集合类对象取用时使用 (),IE 能接受,MF 不能。
(2)解决方法:
改用 [] 作为下标运算。如:document.forms("formName") 改为 document.forms["formName"]。
又如:document.getElementsByName("inputName")(1) 改为 document.getElementsByName("inputName")[1]
(3)其它
3. window.event
(1)现有问题:
使用 window.event 无法在 MF 上运行
(2)解决方法:
MF 的 event 只能在事件发生的现场使用,此问题暂无法解决。可以这样变通:
原代码(可在IE中运行):
<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit()"/>
...
<script language="javascript">
function gotoSubmit() {
...
alert(window.event); // use window.event
...
}
</script>
新代码(可在IE和MF中运行):
<input type="button" name="someButton" value="提交" onclick="javascript:gotoSubmit(event)"/>
...
<script language="javascript">
function gotoSubmit(evt) {
evt = evt ? evt : (window.event ? window.event : null);
...
alert(evt); // use evt
...
}
</script>
此外,如果新代码中第一行不改,与老代码一样的话(即 gotoSubmit 调用没有给参数),则仍然只能在IE中运行,但不会出错。所以,这种方案 tpl 部分仍与老代码兼容。
4. HTML 对象的 id 作为对象名的问题
(1)现有问题
在 IE 中,HTML 对象的 ID 可以作为 document 的下属对象变量名直接使用。在 MF 中不能。
(2)解决方法
用 getElementById("idName") 代替 idName 作为对象变量使用。
5. 用idName字符串取得对象的问题
(1)现有问题
在IE中,利用 eval(idName) 可以取得 id 为 idName 的 HTML 对象,在MF 中不能。
(2)解决方法
用 getElementById(idName) 代替 eval(idName)。
6. 变量名与某 HTML 对象 id 相同的问题
(1)现有问题
在 MF 中,因为对象 id 不作为 HTML 对象的名称,所以可以使用与 HTML 对象 id 相同的变量名,IE 中不能。
(2)解决方法
在声明变量时,一律加上 var ,以避免歧义,这样在 IE 中亦可正常运行。
此外,最好不要取与 HTML 对象 id 相同的变量名,以减少错误。
(3)其它
参见 问题4
7. event.x 与 event.y 问题
(1)现有问题
在IE 中,event 对象有 x, y 属性,MF中没有。
(2)解决方法
在MF中,与event.x 等效的是 event.pageX。但event.pageX IE中没有。
故采用 event.clientX 代替 event.x。在IE 中也有这个变量。
event.clientX 与 event.pageX 有微妙的差别(当整个页面有滚动条的时候),不过大多数时候是等效的。
如果要完全一样,可以稍麻烦些:
mX = event.x ? event.x : event.pageX;
然后用 mX 代替 event.x
(3)其它
event.layerX 在 IE 与 MF 中都有,具体意义有无差别尚未试验。
8. 关于frame
(1)现有问题
在 IE中 可以用window.testFrame取得该frame,mf中不行
(2)解决方法
在frame的使用方面mf和ie的最主要的区别是:
如果在frame标签中书写了以下属性:
<frame src="xx.htm" id="frameId" name="frameName" />
那么ie可以通过id或者name访问这个frame对应的window对象
而mf只可以通过name来访问这个frame对应的window对象
例如如果上述frame标签写在最上层的window里面的htm里面,那么可以这样访问
ie: window.top.frameId或者window.top.frameName来访问这个window对象
mf: 只能这样window.top.frameName来访问这个window对象
另外,在mf和ie中都可以使用window.top.document.getElementById("frameId")来访问frame标签
并且可以通过window.top.document.getElementById("testFrame").src = 'xx.htm'来切换frame的内容
也都可以通过window.top.frameName.location = 'xx.htm'来切换frame的内容
关于frame和window的描述可以参见bbs的‘window与frame’文章
以及/test/js/test_frame/目录下面的测试
----adun 2004.12.09修改
9. 在mf中,自己定义的属性必须getAttribute()取得
10.在mf中没有 parentElement parement.children 而用
parentNode parentNode.childNodes
childNodes的下标的含义在IE和MF中不同,MF使用DOM规范,childNodes中会插入空白文本节点。
一般可以通过node.getElementsByTagName()来回避这个问题。
当html中节点缺失时,IE和MF对parentNode的解释不同,例如
<form>
<table>
<input/>
</table>
</form>
MF中input.parentNode的值为form, 而IE中input.parentNode的值为空节点
MF中节点没有removeNode方法,必须使用如下方法 node.parentNode.removeChild(node)
11.const 问题
(1)现有问题:
在 IE 中不能使用 const 关键字。如 const constVar = 32; 在IE中这是语法错误。
(2)解决方法:
不使用 const ,以 var 代替。
12. body 对象
MF的body在body标签没有被浏览器完全读入之前就存在,而IE则必须在body完全被读入之后才存在
13. url encoding
在js中如果书写url就直接写&不要写&例如var url = 'xx.jsp?objectName=xx&objectEvent=xxx';
frm.action = url那么很有可能url不会被正常显示以至于参数没有正确的传到服务器
一般会服务器报错参数没有找到
当然如果是在tpl中例外,因为tpl中符合xml规范,要求&书写为&
一般MF无法识别js中的&
14. nodeName 和 tagName 问题
(1)现有问题:
在MF中,所有节点均有 nodeName 值,但 textNode 没有 tagName 值。在 IE 中,nodeName 的使用好象
有问题(具体情况没有测试,但我的IE已经死了好几次)。
(2)解决方法:
使用 tagName,但应检测其是否为空。
15. 元素属性
IE下 input.type属性为只读,但是MF下可以修改
16. document.getElementsByName() 和 document.all[name] 的问题
(1)现有问题:
在 IE 中,getElementsByName()、document.all[name] 均不能用来取得 div 元素(是否还有其它不能取的元素还不知道)。
摘要: 设计者:王海波 2004-11-20 Asp.net的设计方式和设计理念和其他的如Asp,Jsp,Php,Perl
等都不一样,几乎是完全的面向对象设计!代码的复用就是其
中差异较大的特点之一,Asp.net除了可以用Include以外,还提供
了比较有特点的Web控件,包括:Ascx形式和带设计时支持的控
件[本文属于后者],为...
阅读全文
数据类型 |
数据类型简写 |
标准命名举例 |
Array |
arr |
arrShoppingList |
Boolean |
bln |
blnIsPostBack |
Byte |
byt |
bytPixelValue |
Char |
chr |
chrDelimiter |
DateTime |
dtm |
dtmStartDate |
Decimal |
dec |
decAverageHeight |
Double |
dbl |
dblSizeofUniverse |
Integer |
int |
intRowCounter |
Long |
lng |
lngBillGatesIncome |
Object |
obj |
objReturnValue |
Short |
shr |
shrAverage |
Single |
sng |
sngMaximum |
String |
str |
strFirstName |
控件类型 |
缩写 |
示例 |
Animated button |
ani |
aniMailBox |
Button |
btn |
|
Check box |
chk |
chkReadOnly |
ColorDialog |
clrdlg |
|
Combobox,drop-down list box |
cbo |
cboEnglish |
Communications |
com |
comFax |
ContextMenu |
ctxmnu |
|
Control(used within procedures when the specific type is unknown) |
ctr |
ctrCurrent |
CrystalReportViewer |
crvw |
|
Data |
dat |
datBiblio |
Data grid |
dgd |
dgdTitles |
Data list |
dbl |
dblPublisher |
Data repeater |
drp |
drpLocation |
Data-bound combo box |
dbcbo |
dbcboLanguage |
Data-bound grid |
dbgrd |
dbgrdQueryResult |
Data-bound list box |
dblst |
dblstJobType |
Datetime picker |
dtp |
dtpPublished |
Directory list box |
dir |
dirSource |
DomainUpDown |
dupd |
|
Drive list box |
drv |
drvTarget |
ErrorProvider |
err |
|
File list box |
fil |
filSource |
Flat scroll bar |
fsb |
fsbMove |
FontDialog |
fntdlg |
|
Form |
frm |
frmEntry |
Frame |
fra |
fraLanguage |
Gauge |
gau |
gauStatus |
Graph |
gra |
graRevenue |
Grid |
grd |
grdPrices |
GroupBox |
grp |
|
HelpProvider |
hlp |
|
Hierarchical flexgrid |
flex |
flexOrders |
HScroll bar |
hsb |
hsbVolume |
Image |
img |
imgIcon |
Image combo |
imgcbo |
imgcboProduct |
ImageList |
ils |
ilsAllIcons |
Label |
lbl |
lblHelpMessage |
Line |
lin |
linVertical |
LinkLabel |
lnk |
|
List box |
lst |
lstPolicyCodes |
ListView |
lvw |
lvwHeadings |
MAPI message |
mpm |
mpmSentMessage |
MAPI session |
mps |
mpsSession |
MCI |
mci |
mciVideo |
Menu |
mnu |
mnuFileOpen |
Month view |
mvw |
mvwPeriod |
MonthCalendar |
mcl |
|
MS Chart |
ch |
chSalesbyRegion |
MS Flex grid |
msg |
msgClients |
MS Tab |
mst |
mstFirst |
NotifyIcon |
nti |
|
NumericUpDown |
nupd |
|
OLE container |
ole |
oleWorksheet |
OpenFileDialog |
ofdlg |
|
PageSetUpDialog |
psdlg |
|
Picture box |
pic |
picVGA |
Picture clip |
clp |
clpToolbar |
PrintDocument |
prndoc |
|
PrintPreviewControl |
ppctl |
|
PrintPreviewDialog |
ppdlg |
|
ProgressBar |
prg |
prgLoadFile |
RadioButton |
rbtn |
|
Remote Data |
rd |
rdTitles |
RichTextBox |
rtf |
rtfReport |
SaveFileDialog |
sfdlg |
|
Shape |
shp |
shpCircle |
Slider |
sld |
sldScale |
Spin |
spn |
spnPages |
Splitter |
spt |
|
StatusBar |
sta |
staDateTime |
SysInfo |
sys |
sysMonitor |
TabContrl |
tab |
|
TabStrip |
tab |
tabOptions |
Text box |
txt |
txtLastName |
Timer |
tmr |
tmrAlarm |
Toolbar |
tlb |
tlbActions |
TrackBar |
trb |
|
TreeView |
tre |
treOrganization |
UpDown |
upd |
updDirection |
VScroll bar |
vsb |
vsbRate |
谁有新的请随时补充。
这几天写了一个dll接口,封装了所有的支付宝集成(asp.net就是方便哈).
具体信息如下<先引用下面提供的dll>:
一.卖东西过程处理,下面是例子.
============================================
主题(subject): 钢笔
价格(price): 0.01
数量(number): 1
发货类型(trasport): 3
账单号(order_no): 200512162057
=============================================
用下面的代码就可以了:
private void Btn_Buy_Click(object sender, System.Web.UI.ImageClickEventArgs e)
{
Qgzxol.AlipayKernel.PayTo.Object o=new Qgzxol.AlipayKernel.PayTo.Object
(this,"winterserver@126.com","14xdd11zhcoeg8a60wagv7rnbddffyl2");
o.Add(Qgzxol.AlipayKernel.PayTo.Keys.subject,"钢笔");
o.Add(Qgzxol.AlipayKernel.PayTo.Keys.price,"0.01");
o.Add(Qgzxol.AlipayKernel.PayTo.Keys.number,"1");
o.Add(Qgzxol.AlipayKernel.PayTo.Keys.transport,"3");
o.Add(Qgzxol.AlipayKernel.PayTo.Keys.order_no,"200512162057");
string url=o.GetUrl();
this.Response.Redirect(url);
}
注:
1.所有的东西都在Qgzxol.AlipayKernel.PayTo.Keys的属性中说明了.
2.初始化Qgzxol.AlipayKernel.PayTo.Object时,要注意用你自己的商户email和安全验证码.
二.sendOff和checkOut的处理过程.
===============================================
当有客户买了这支钢笔,并付款到了支付宝,我们就会收
到sendOff通知.
===============================================
先在支付宝中设置好通知url,假设是Listener.aspx页面,
页面代码如下处理即可:
private void Page_Load(object sender, System.EventArgs e)
{
if(this.Page.IsPostBack==false)
{
Qgzxol.AlipayKernel.Notify.Object o=new Qgzxol.AlipayKernel.Notify.Object(this);
o.sendOff+=new Qgzxol.AlipayKernel.Notify.SendOffHandler(this.ProcessSendOff);
o.checkOut+=new Qgzxol.AlipayKernel.Notify.CheckOutHandler(this.ProcessCheckOut);
o.StartListener();
}
}
public void ProcessSendOff(object sender)
{
Qgzxol.AlipayKernel.Notify.Object o=(Qgzxol.AlipayKernel.Notify.Object)sender;
///发货后,我们向服务器送去发货通知,这就是修改returnTxt=Y即可.
o.returnTxt=Qgzxol.AlipayKernel.Notify.ATNResult.Y;
}
public void ProcessCheckOut(object sender)
{
Qgzxol.AlipayKernel.Notify.Object o=(Qgzxol.AlipayKernel.Notify.Object)sender;
///收款后,我们向服务器送去已经收款通知,这就是修改returnTxt=Y
o.returnTxt=Qgzxol.AlipayKernel.Notify.ATNResult.Y;
}
也就是把这两个处理过程独立到外部,你可以自己完成这两个函数的逻辑.
期待最后的官方1.0版出来.
三.下面是更多信息:
如果您还有不明白的地方,请看下面的文档:
1.Qgzxol.AlipayKernel.dll 这是所有逻辑的封装,您必须引用这个dll处理.
2.AlipayKernel简化说明.doc 简化说明,简单的讲叙了怎样使用这个dll.
3.AlipayKernel接口说明.doc 详细说明,包含更多的信息,包括系统内部结构.
4.AlipayKernel系统模型.gif 系统的类构成模型图片.
5.公测地址<最近校园网有问题,您可以下载第二个附件后在本地查看>:
页面地址:http://202.197.75.101/NetShop/Public.aspx
处理通知地址:http://202.197.75.101/NetShop/Listener.aspx
您可以购买物品,每次0.01元,会自动发货。
联系方式: QQ 398510617 Email winterserver@126.com 博客: http://blog.csdn.net/winlin398510617
注意:
1.第一个附件是核心dll和文档,第二个附件是核心dll的源码和一个站点实例的源码.
2.所有的配置都在web.config中对应的字段.您也可以在config配置类中代码配置.也可以在初始化对象的时候用构造函数配置.反正配置很灵活,可以实现几个商家同时卖东西.
3.由于公布源码,所以有什么bug请跟帖;请勿用于商业用途,因为它是开发商业网站的时候提出来的.请保留版权信息.
4.若压缩文件有密码,密码(区分大小写)为:Qgzxol.WinLin
dll和所有文档下载:http://www.cnitblog.com/Files/yhf119/Qgzxol.Alipay.All.rar
实例下载:http://www.cnitblog.com/Files/yhf119/Sample.rar
Visual Studio .NET 中的 Web 项目和源代码管理集成
来源:http://www.microsoft.com/china/MSDN/library/archives/library/dv_vstechart/html/vetchWebProjectssourCEcontrolintegrationinVisualStudionet.asp#vetchappendixcdeployingwebprojects
Korby Parnell 和 Martyn Lovell
Visual Studio Team
Microsoft Corporation
2002 年 2 月
摘要:本文为在 Visual Studio .NET 中开发源代码管理的 Web 项目提供了策略。
目录
简介
任何一个人都不可能掌握快速而连贯地创建一流水平的软件应用程序所需的全部语言、技术、工具和方法,因此,大多数专业开发人员都以团队的形式合作进行开发。这也是效率和经济效益所需要的。同样,大多数软件开发团队采用并行开发方法,这样就可以将单个开发人员从“串行开发”的束缚中解脱出来;所谓串行开发,即只有当一位开发人员完成任务后,下一位开发人员才能开始工作。“并行开发”允许多个开发人员同时“隔离”地工作,以稳妥的方式开发某个项目的相同或不同的部分和版本。要发挥并行开发的优势,团队必须实现进程化,以便项目开发人员能够在小冲突变成大冲突之前,迅速、逐步及自动地(某些情况下)对其进行解决。通过确保足够的开发隔离度,Visual Studio .NET 可以提高团队的协作能力。
隔离工作时,两个或多个开发人员可以进行有冲突地更改,并确保至少有一名团队成员有机会对各个冲突点进行审阅并选择合适的方案。与以前发布的 Microsoft 开发工具所不同的是,Visual Studio .NET 现在支持 Web 和非 Web 项目的真正隔离开发。
本文提供了以团队方式顺利开发 ASP.NET Web 项目的策略,介绍了 Web 项目文件管理,以便您更方便地了解如何以团队的形式设置、开发和部署源代码管理的 Web 应用程序。一个可靠的协作开发策略由以下因素组成:
要确保协作成功,其中最简单的方法就是使用源代码管理解决方案、项目和其他共享资源。源代码管理可以保护团队资源不会被意外删除,保护单个开发人员的更改不会被盲目或无意覆盖,还可以按版本维护所有项目文件的历史记录。Visual Studio .NET 使源代码管理成为项目文件管理的扩展,从而降低了源代码管理的复杂性。您无需离开集成开发环境 (IDE) 或者打开另一个应用程序,即可实现所有源代码管理操作。
了解解决方案和项目
Visual Studio 减少了项目文件管理和源代码管理中许多单调而复杂的操作。例如,当您在项目中添加新项时,Visual Studio 可以将其保存在存储区中的某个位置。只要文件是打开的并且按要求与项目编译在一起,就无需您来确定文件的保存位置。而在开发 Web 应用程序时,了解 Visual Studio .NET 如何在后台管理项目文件,可以为您和您的团队节省大量时间和金钱。
解决方案
无论何时从存储区中创建 Web 项目或打开现有的 Web 项目,系统都将自动创建包含该项目的解决方案。所有 Visual Studio .NET 解决方案都包含一个解决方案文件 solutionname.sln,它存储解决方案元数据,例如项目列表及其在存储区中的位置。解决方案包含另一个解决方案文件 solutionname.suo,它跟踪用户特定的信息,例如 Visual Studio 项目的默认保存位置。将解决方案添加到源代码管理时,将只添加 *.sln 文件。而且,从始至终都不会签入 *.suo 文件。
从源代码管理的角度而言,以下两个关于解决方案的重要事项值得注意。
- 解决方案是本地的。解决方案和 Web 项目文件存储在不同的位置。与 Web 项目的文件项不同,解决方案文件永远不会存储在 Web 服务器上,除非您刻意将其存放在 Web 服务器上(建议您不要这样做)。Web 项目文件(.vbproj 和 .csproj)驻留在 Web 服务器上,而解决方案文件(.sln 和 .suo)以及 Solution Items(解决方案项)文件夹中的所有文件项在默认情况下都存储在文件系统文件夹中。这一点非常重要,因为它会影响源代码管理的 Web 项目的结构和可管理性。有关将 Web 项目解决方案添加到源代码管理中时所发生情况的详细信息,请参阅将 Web 项目解决方案添加到源代码管理中时,会发生什么?。
- 创建解决方案,而不是项目。通过先创建一个解决方案,然后再添加项目,您可以在存储区中维护解决方案及其项目之间的逻辑父子关系。这样做可以确保多项目解决方案中从属项目的可搜索性,还有助于避免一些易混淆的问题,这些问题可能会伴随一些更复杂的源代码管理操作而出现,例如分支与合并。
项目
在管理文件方面,Visual Studio .NET 只包含两类项目:Web 和非 Web 项目(即本地项目)。
- Web 项目
- 在 New Project(新建项目)对话框的 HTTP 位置创建的所有项目。这些项目主要用于向 Web 浏览器(即被称为 Web 应用程序的项目)提供内容,还可以在开发人员需要在服务器 (Web Services) 之间共享数据时使用。
- 本地项目
- 在非 HTTP 位置创建的所有项目(例如,C:/MyProjects 或 \\MyComputer\MyProjects)。最常见的本地项目用于创建 Windows 应用程序。
与解决方案文件 *.sln 一样,所有项目都包含一个项目文件,用于标识其各项在计算机文件系统中的物理位置。例如,当您向 Visual Basic ASP.NET 项目添加文本文件时,其相对路径将被插入到项目文件 (*.vbproj) 中。
Web 项目
ASP.NET Web 项目是一种快速应用程序开发 (RAD) 模板,适用于基于 Web 的瘦客户机应用程序。在 ASP.NET Web 应用程序中,Web 窗体页通过浏览器向用户提供信息,并使用服务器代码实现应用程序逻辑。Web 应用程序是围绕 ASP.NET 建立的,ASP.NET 是一个平台,包含在 Web 服务器上开发和运行应用程序所需的设计时对象和控件以及运行时执行环境。
管理源代码管理下的 Web 项目时,需要注意以下事项:
- 使用 Visual Studio .NET 执行所有可用的源代码管理操作。
- 不要以手动方式对文件强制进行源代码管理。使用 Add to Source Control(添加到源代码管理)或 Check In(签入)命令时,所有应由源代码管理的文件都将自动被存放在那里。
访问方法
Visual Studio 通过以下两种方法之一访问和管理 Web 服务器上的文件:文件共享,这是 Visual Studio .NET 中的新功能;或 FrontPage,它已经在 Visual InterDev 中使用。默认情况下,使用新增的文件共享访问方法。
- 文件共享
- Visual Studio 使用基于 Windows 的文件管理命令访问 Web 项目文件。文件共享是默认的 Web 访问方法,它为源代码管理提供良好的支持。有关文件共享访问方法及其对于团队开发的影响的详细信息,请参阅文件共享。
- FrontPage
- 所有文件都使用 HTTP 协议进行管理。来自 Visual Studio 的源代码管理请求通过 FrontPage Server Extensions 被转发到源代码管理提供程序(例如 Visual SourceSafe)的服务器安装。FrontPage 访问方法支持的源代码管理命令比文件共享访问方法支持的命令要少。有关 FrontPage 访问方法的详细信息,请参阅 FrontPage Server Extensions。
项目文件
与本地项目不同,Web 项目不能包含其项目目录以外的文件项。将现有文件添加到 Web 项目时,Visual Studio 通过将文件复制到 virtual application root(虚拟应用程序根,Web 服务器上的一个目录,所有项目项和生成输出都存储在这里),从而将其包含在项目中。
配置文件
Web.config 文件是一种特殊的应用程序配置文件,可以在设计应用程序时定义其设置。部署之后,无需关闭 Web 服务器即可更改这些设置。多个名为 Web.config 的配置文件可以出现在 ASP.NET Web 应用程序服务器的多个目录中。每个 Web.config 文件都将配置设置(例如 IIS 身份验证设置)应用到其自身目录的源文件中。
您可以在 Web 项目中创建自定义配置文件,覆盖默认的 Web.config 文件(例如,mysettings.config)中的设置。在团队开发环境中工作时,有时候需要创建此类文件。有关何时创建自定义配置文件(尤其是在开发共享项目时)的详细信息,请参阅 Web 引用。对于 Web 项目,Web.config 是唯一要添加到源代码管理的 *.config 文件。
不进行源代码管理的文件
Projectname.vbproj.webinfo 是特殊的项目文件,用于记录虚拟应用程序根。由于每个用户的项目工作副本必须包含其自身的虚拟应用程序根,因此 *.webinfo 文件不会出现在 Solution Explorer(解决方案资源管理器)中,也不会被添加到源代码管理。因此,如果您分配了 *.webinfo 文件,则每个开发人员的更改都将在没有事先警告的情况下保存到您的个人文件之上。
除 webinfo 文件外,Visual Studio .NET 也不会向源代码管理添加特定的项目文件。大多数排除的文件都包含不能共享的用户特定的设置。与 *.suo 文件一样,下列 Web 项目文件也不应添加到源代码管理:
- 生成输出
- *.vbproj.user、*.csproj.user
- *.vbproj.webinfo、*.csproj.webinfo
- *.scc、.vspscc、.vssscc 等等。
- 包含可覆盖标准 Web.config 文件的用户设置的所有配置文件。有关示例,请参阅附录 A:设置动态 URL Web 引用。
- 默认情况下在 Solution Explorer(解决方案资源管理器)中隐藏的所有文件(aspx.vb 和 aspx.resx 文件除外)。
Web 引用、Web 项目和源代码管理集成
“Web 引用”是生成的代理类,表示已部署的 XML Web service 所提供的功能。在 ASP.NET Web 项目中,URL 代表 Web 引用,它既可以是静态的,也可以是动态的。Web 引用 URL 属性的默认值是静态的。在团队中部署 Web 应用程序时,某些情况下需要将此属性更改为动态。对于那些使用源代码管理并且开发包含 ASP.NET Web 应用程序和 Web service 项目的解决方案的团队,建议使用动态 URL。在某些情况下,Web 引用可能对一个用户有效,而对另一个用户无效。如果出现这种情况,您可以使用配置文件在个人配置文件中定义并存储这些共享资源的相对路径。有关动态 URL Web 引用及其创建方法的详细信息,请参阅附录 A:设置动态 URL Web 引用。
建立源代码管理策略
源代码管理正如一种工具,以软件开发的方式进行工作。它可以使并行开发变得更加容易,还可以实现开发隔离,但是它并不能确保实现这两个功能。一个团队只有通过建立策略并坚持执行,才能发掘出源代码管理的最大潜力。开发 Web 项目的策略时,您必须从以下各类中选择一种工作方法:
- 本地主机与远程主机
- 讨论本地主机与远程主机文件共享 Web 项目之间的重要区别。
- Web 访问方法
- 定义并比较 FrontPage 和文件共享访问方法。
- 共享签出
- 实现禁用独占签出模式的环境,以便开发人员能够同时编辑相同的文件。
本地主机与远程主机
在团队开发环境中,最初保存文件共享 Web 项目的位置至关重要。如果将 Web 项目的工作副本保存到 http://localhost 的子目录,则该 Web 项目将被看作“本地主机项目”。如果将其工作副本保存到非“本地主机”的位置(例如 http://teamserver/webapplication1),则该项目被看作“远程主机项目”。
本地主机项目在本地进行调试。远程主机项目进行远程调试。但是在您调试远程主机 Web 项目之前,必须让该计算机 Administrators 组的成员授予您 Debugger User 权限。
在 Visual Studio .NET 中,Http://localhost 是 Web 项目的默认位置,也是推荐位置。出现下列情况之一时,您需要将项目的工作副本保存到远程主机位置:
- 您的个人计算机不能用作 IIS Web 服务器。
- 您需要在生产服务器上执行预部署测试和调试。
在大多数实际情况下,团队用来部署其 Web 应用程序的生产服务器的性能要比他们的开发计算机强大得多。将 Web 应用程序部署到此类服务器之前,您可以从源代码管理(位于您自己的计算机中)中将它们打开,在生产服务器的虚拟目录中设置工作副本项目的位置,然后运行并调试该项目。在生产服务器上,您可以测试计时和并发问题,这些问题在性能较差的台式计算机上可能不会显示出来。在一台计算机上开发、然后使用与生产服务器环境类似或相同的另一台计算机进行调试的应用程序,通常易于部署,而且成本较低。
注意:当一位用户开始调试后,调试进程将锁定共享的 Web 服务器,从而在停止调试前有效防止其他用户使用该服务器。
Web 访问方法
Web 访问方法指定 Visual Studio 如何获得对网络上 Web 项目文件的写入权限。您所选择的方法对于处理源代码管理的 Web 项目具有重大影响。对每个 Web 项目始终使用相同的 Web 访问方法,可以避免团队出现混乱情况。
Visual Studio 提供两种 Web 访问方法,即“文件共享”和“FrontPage”。文件共享是一项新增功能,它是大多数 Visual Studio .NET Web 项目的默认 Web 访问方法,也是建议使用的访问方法。
文件共享
这是默认的访问方法。文件共享 Web 应用程序驻留在共享的网络位置。创建 Web 应用程序时,您需要为项目提供 HTTP 地址,Visual Studio 则将该地址解析为统一命名约定 (UNC) 共享。接下来对该项目执行的操作将使用 UNC 可寻址网络共享;通过组合使用直接文件访问和 HTTP 访问,在网络位置上编辑、保存、编译并运行该项目。
从源代码管理打开 Web 项目时,Visual Studio 将在您的工作文件夹(例如 http:/localhost/WebApp1)中创建项目源代码管理的主控副本的工作副本。工作文件夹可以位于任何一个 Web 服务器上,但是在以团队方式进行开发时,选择正确的位置至关重要。有关详细信息,请参阅协作开发模式。
下图说明了多个开发人员如何以隔离方式,使用文件共享 Web 访问方法安全地并行开发主控 Web 项目。
图 1
由于每个开发人员都编辑主控 Web 项目的工作副本,因此文件共享 Web 访问方法支持共享签出。通过共享或多重签出,许多用户可以同时编辑项目文件并保存对项目文件的更改,而不必担心是否可能会覆盖另一个用户的更改。对于专业的开发团队而言,建议在共享或多签出模式下工作,因为这将有助于并行开发。有关详细信息以及在共享或多签出模式下工作的最佳实例,请参阅共享签出。
文件共享 Web 访问方法比 FrontPage 更具优势,因为它:
- 支持共享签出。通过共享签出,多个用户可以签出并编辑任何文件,即使其他用户已签出该文件。
- 支持高级源代码管理命令,例如 branch、merge、pin 和 label。
- 允许进行隔离。团队成员可以在其个人计算机上编辑共享文件,然后安全地合并更改,而不会覆盖团队的主控副本。
请使用与 Microsoft 源代码管理接口 (MSSCCI) 兼容的任何源代码管理提供程序。FrontPage 访问方法仅适用于 Visual SourceSafe。
FrontPage Server Extensions
您还可以使用 FrontPage Server Extensions 配置 Visual Studio,以访问 Web 项目文件。在创建应用程序的服务器上,FrontPage 与 Visual SourceSafe 集成在一起。来自 Visual Studio 的源代码管理请求通过 FrontPage Server Extensions 转发到 Visual SourceSafe 的服务器安装。
在 Visual Studio .NET 中开发 FrontPage Web 项目时,存在一个工作副本。单版本项目驻留在 IIS Web 服务器上,在该服务器使用 HTTP 协议对其进行管理。下图说明了两个开发人员如何在由版本控制的 FrontPage Web 项目环境下进行交互操作。
图 2
注意:您不能通过 FrontPage Server Extensions 使用 Visual Studio 将项目添加到源代码管理,必须在创建该项目的 Web 服务器上手动添加该项目。
对于大多数应用程序而言,建议团队不要在 Visual Studio .NET 中使用 FrontPage Web 访问方法,因为它不利于有效的并行开发。源代码管理的 FrontPage Web 项目是以串行的方式进行开发的:一名开发人员一次编辑一个文件。然而在某些情况下,您必须使用 FrontPage Web 访问方法。有关详细信息,请参阅协作开发模式。
注意:如果您所在的团队以 LAN 或 VPN 方式连接,您可以将现有的 Web 项目升级为新的文件共享访问方法。有关详细信息,请参阅从 FrontPage 升级到文件共享。
共享签出
对于大多数专业开发团队,建议使用共享签出(或多签出模式)。通过共享签出,多个用户可以签出并编辑任何文件,即使其他用户已签出该文件。
如果您习惯于在独占签出模式下工作,则共享签出所导致的合并冲突可能(无法自动解决的重叠更改)比想象中要少。如果出现冲突,源代码管理提供程序通常会提供一种简单的方法来确定哪些更改需要保留,哪些更改需要放弃。
如果团队确实使用共享签出模式,那么在没有对 IDE 中的项目项事先执行 Get(获取)操作的前提下,千万不要使用 Check In(签入)命令。从源代码管理获取最新版本后,您可以将个人更改与版本主控副本(如果上次签出以后发生了更改)合并,将已合并的项目保存到工作文件夹,然后测试该项目,以确保它仍然可以正常工作。如果在没有获取最新版本的 Web 项目的情况下尝试签入自上次签出后已发生更改的文件,则可能会以损坏的版本覆盖工作版本。在这种情况下,您有两种选择,但两种选择都不会令人满意:
- 可以在 Web 服务器上调试该项目。但对于 ASP.NET Web 项目来说,在您的工作完成之前,这样做可能会阻止其他开发人员使用该项目。有关详细信息,请参阅本地主机与远程主机。
- 在源代码管理中,您可以返回到最近的主控副本的正常版本,自上次签出项目后对工作副本所做的更改将会丢失。这种方法会导致数据丢失,因此建议您不要采用。另外,必要时最好在您自己的计算机上执行 Get(获取)操作并进行合并,而不要在服务器上执行签入及合并。
源代码管理提供程序以不同的方式处理共享签出。如果您使用的是 Visual SourceSafe 6.0c,则在默认情况下为独占签出。
在 Visual SourceSafe 6.0 中实现共享签出
- 在源代码管理服务器上,单击“开始”按钮,指向“程序”,指向“Microsoft Visual SourceSafe”,然后单击“Visual SourceSafe 6.0 Admin”。
- 单击 Users(用户),单击 Open SourceSafe Database(打开 SourceSafe 数据库),选择相应的数据库,然后单击 Open(打开)。
- 在 Tools(工具)菜单中,单击 Options(选项)。
在 General(常规)选项卡上,选择 Allow multiple checkouts(允许多重签出),然后单击 OK(确定)。
协作开发模式
对于 Web 项目而言,协作开发模式由以下两个因素综合决定,即:每个项目的 Web 访问方法和开发人员保存其工作副本的位置。主要有三种模式:
隔离开发
在这种模式下,每个开发人员都可以进行编辑、运行和调试,并将增量更改保存到团队中源代码管理的主控 Web 项目的个人工作副本中。开发人员将工作副本保存到他们的个人 Web 服务器上的本地主机位置。各个成员通过源代码管理的主控项目进行间接交互。团队成员可以同时处理相同的文件,因为他们的源代码管理提供程序可以通过以下两种方式调节所有版本冲突:自动调节或者提示成员手动合并无法自动解决的冲突。下图说明了源代码管理如何将文件共享 Web 项目的开发人员之间相互隔离开来,不受彼此更改的影响。
图 3
使用“本地主机模式”,开发人员可以在 http://localhost/projectname 下创建 Web 项目。当项目开发人员首次从源代码管理打开项目时,他们将工作副本保存到个人 Web 服务器的同一相对 URL 地址中,即 http://localhost/projectname。
提示:即使没有将工作副本保存到本地主机位置(例如 http://ProductionServer/WebApp1),只要确保您的队友没有将其工作副本保存到同一个 Web 服务器,您仍然可以实现完全隔离。将您的工作副本保存到远程 Web 服务器上,以在项目的生产环境中执行部署前测试和调试(查找计时和并发问题)。
优势
- 与在半隔离或非隔离开发环境下创建项目相比,在隔离模式下可以更轻松地创建、访问和管理 Web 引用。
- 两个或多个开发人员可以分别在各自的服务器上同时调试 ASP.NET 应用程序。
- 与其他协作开发模式相比,隔离模式的硬件、软件和服务器管理成本非常合理。
- 支持高级源代码管理功能,例如共享(多重)签出,以及 merge、branch、pin 和 label 等命令。
- 可以与任何 MSSCCI 兼容的源代码管理提供程序一起使用。
缺点
- 在某些情况下,无法实际进行测试(例如,正在使用模拟/代理并且存在跃点限制,或者生产服务器的速度比开发计算机的速度快得多)。
- 每个开发人员都要负责配置 IIS 设置,而当工作副本存储在中心 Web 服务器上时,则不必如此。
- 所有开发人员都必须具备对相同 LAN 或 VPN 的访问权限。
半隔离开发
在此模式下,由一个团队成员创建文件共享 Web 项目,然后使用 Visual Studio .NET 集成的源代码管理服务将该项目添加到源代码管理中。其他开发人员从源代码管理打开该项目,并以隔离方式编辑主 Web 项目的工作副本。不过,他们使用远程 Web 服务器的共享资源来运行和调试。与隔离开发模式不同,开发人员将各自的工作副本保存到公共 Web 服务器上。多个开发人员仍然可以同时签出和编辑相同的文件,但是任何时候,都只有一个开发人员能够在 Web 服务器上运行和调试应用程序。
下图显示了在开发源代码管理的文件共享 Web 项目时,开发人员与其工作副本在共享 Web 服务器上的位置之间的关系。
图 4
使用半隔离模式,开发人员可以在远程服务器上创建 Web 项目(例如,http://teamserver/WebApp1_DevA),然后将其添加到源代码管理中。项目开发人员首次从源代码管理打开该项目时,他们使用不同的项目名称将自己的工作副本保存在同一个远程 Web 服务器上的不同位置(例如,http://teamserver/WebApp1_DevB)。与简单的隔离开发模式不同,开发人员不能使用与其他开发人员相同的名称来引用工作副本。
优势
- 硬件成本较低,每个项目只需要一套企业软件许可证。
- 团队可以有一个网络管理员,专门负责共享开发资源的管理。
- 无需访问 http://localhost。无需在每个开发人员的计算机上安装 IIS。
- 支持高级源代码管理功能,例如共享(多重)签出,以及 merge、branch、pin 和 label 等命令。
- 可以与任何 MSSCCI 兼容的源代码管理提供程序一起使用。
缺点
- 当任一用户进行调试时,调试进程将锁定共享的 Web 服务器,从而阻止其他用户使用同一服务器上的项目。
- Web 引用不能自动共享。有关详细信息,请参阅附录 A:设置动态 URL Web 引用。
- 所有开发人员都必须具备对相同 LAN 或 VPN 的访问权限。
非隔离开发
在此模式下,开发人员并不是在 Web 项目的工作副本上进行操作,而是所有的团队成员直接进行编辑,并将其更改保存到 FrontPage Web 项目的主控副本。开发人员无法并行工作,也无法轻易与其他开发人员隔离开来。下图说明了两个开发人员如何在非隔离 Web 项目(已在 IIS 中配置为使用外部版本控件)环境中进行交互操作。
图 5
与文件共享项目不同,在 IDE 中,您无法将 FrontPage Web 项目添加到源代码管理,而要在 IIS 中更改其版本控件状态。有关详细信息,请参阅设置外部源代码管理。Built in(内置)和 Use External(使用外部)这两个 IIS 版本控件选项都可以强制执行独占签出,从而在某一时刻只允许由一名开发人员对文件进行写入操作。这两个版本控件选项的区别在于:Built in(内置)在签入时不会将最新的版本发送到源代码管理,而 Use External(使用外部)则会将最新的版本发送到源代码管理。对于 FrontPage Web 项目而言,建议使用 Use External(使用外部)选项。
优势
缺点
- 不支持多重签出。
- 不能提供与其他模式相同的文件安全保护级别。例如,如果某人在使用 Built in(内置)版本控件时从 Web 服务器上删除了项目文件,则无法从团队成员的开发计算机中恢复该文件。
- 不能使用 FrontPage 访问方法从 Visual Studio 内部将 Web 应用程序添加到源代码管理。有关详细信息,请参阅设置外部源代码管理。
- 不支持高级源代码管理功能,例如共享(多重)签出;或 merge、branch、pin 和 label 等命令。
- 只能与 Visual SourceSafe 源代码管理提供程序配合使用。
- 项目必须保存在 NTFS 分区中。
- 在 FrontPage Web 项目中,无论用户的源代码管理提供程序指定的权限级别如何,只要具有管理员权限,任何用户都可以禁用或启用源代码管理。
选择一种协作开发模式:Web 项目创建
本节可以帮助您快速选择并实施以团队形式进行 ASP.NET Web 项目开发的策略。请回答下表中的问题,以寻找适合您的团队的协作开发模式。选择一种模式后,您可以使用建议的步骤来创建您的 Web 项目,并将其添加到源代码管理。
图 6:确定创建 Web 项目的方式
隔离开发:创建源代码管理的 Web 项目
对于在 Visual Studio .NET 中创建的大部分 Web 项目,建议您采用隔离开发模式。有关该模式的优缺点的详细信息,请参阅隔离开发。
选择 Web 访问方法
- 在 Tools(工具)菜单上,单击 Options(选项)。
- 在 Options(选项)对话框中,单击 Projects(项目)文件夹,然后单击 Web Settings(Web 设置)。
- 在 Preferred access method(首选访问方法)下,单击 File share(文件共享)。
通过创建空白解决方案,然后在其中添加项目,可以改善项目的长期可管理性和可搜索性。您也可以维持本地项目文件与它们在源代码管理服务器上的主控副本之间的紧密对称性。
创建解决方案目录
- 在 File(文件)菜单上,指向 New(新建),然后单击 Blank Solution(空白解决方案)。
- 在 New Project(新建项目)对话框中,键入解决方案的名称和位置。
提示:选择一个可以将此项明确标识为解决方案的名称(例如 SalesWeb_Solution 或 SalesWeb_Soln)。
创建 Web 项目
- 在 File(文件)菜单上,指向 Add Project(添加项目),然后单击 New Project(新建项目)。
- 在 Add New Project(添加新项目)对话框中,从左侧窗格中选择 Visual Basic Projects(Visual Basic 项目)或 Visual C# Projects(Visual C# 项目)。
- 在右侧窗格中选择一个 Web 项目模板。
- 在 Location(位置)框中,键入 http://localhost/projectname(其中 projectname 为新建项目的名称),然后单击 OK(确定)。
现在,您可以将该 Web 项目添加到源代码管理,以便您的队友在开发中使用。有关以下过程的概念性描述,请参阅将 Web 项目解决方案添加到源代码管理中时,会发生什么?。
如果可能,请将项目添加到允许共享签出或多重签出的源代码管理数据库。有关详细信息,请参阅共享签出。
将 Web 项目(及其解决方案)添加到源代码管理
- 在 Solution Explorer(解决方案资源管理器)中,右键单击解决方案节点,然后单击 Add Solution to Source Control(将解决方案添加到源代码管理)。
- 如果显示消息框,请单击 Continue(继续)。
- 按照源代码管理提供程序的要求提供数据库位置和用户登录信息。
- 通过指定解决方案文件的服务器位置,在源代码管理服务器上创建根解决方案目录。
- 在根解决方案目录下,键入项目文件夹的名称,该文件夹将包含 Web 项目文件的主控副本。
注意:要在此解决方案中向源代码管理添加第二个项目及后续项目,请在更改完毕后签入解决方案。
要充分利用隔离开发模式的优点,在首次从源代码管理打开 Web 项目时,项目开发人员必须单独指定该项目工作副本的同一相对地址(http://localhost/projectname)。有关详细的步骤说明,请参阅首次打开现有 Web 项目。
半隔离开发:创建源代码管理的 Web 项目
虽然半隔离开发模式比非隔离开发模式要好,但它不象隔离模式那样有助于协作开发。有关此模式的详细说明及其优缺点的概述,请参阅半隔离开发。
选择 Web 访问方法
- 在 Tools(工具)菜单上,单击 Options(选项)。
- 在 Options(选项)对话框中,单击 Projects(项目)文件夹,然后单击 Web Settings(Web 设置)。
- 在 Preferred access method(首选访问方法)下,单击 File share(文件共享)。
通过创建空白解决方案,然后在其中添加项目,可以改善项目的长期可管理性和可搜索性。您也可以维持本地项目文件与它们在源代码管理服务器上的主控副本之间的紧密对称性。
创建解决方案目录
- 在 File(文件)菜单上,指向 New(新建),然后单击 Blank Solution(空白解决方案)。
- 在 New Project(新建项目)对话框中,键入解决方案的名称和位置。
提示:指定一个可以将此项明确标识为解决方案的名称(例如 SalesWeb_Solution 或 SalesWeb_Soln)。
创建 Web 项目
- 在 File(文件)菜单上,指向 Add Project(添加项目),然后单击 New Project(新建项目)。
- 在 Add New Project(添加新项目)对话框中,选择 Visual Basic Projects(Visual Basic 项目)或 Visual C# Projects(Visual C# 项目)。
- 在右侧窗格中选择一个 Web 项目模板。
- 在 Location(位置)框中,键入 http://servername/projectname(其中 servername 是 Web 服务器的名称,projectname 是新建项目的名称),然后单击 OK(确定)。
现在,您可以将该 Web 项目添加到源代码管理,以便您的队友在开发中使用。
将 Web 项目添加到源代码管理
- 在 Solution Explorer(解决方案资源管理器)中,右键单击解决方案节点,然后单击 Add Solution to Source Control(将解决方案添加到源代码管理)。
- 如果显示消息框,请单击 Continue(继续)。
- 按照源代码管理提供程序的要求提供数据库位置和用户登录信息。
- 通过指定解决方案文件的服务器位置,在源代码管理服务器上创建根解决方案目录。
- 在根解决方案目录下,键入项目文件夹的名称,该文件夹将包含 Web 项目文件的主控副本。
至此,项目已准备就绪,可以进行开发。现在,每个项目开发人员都必须按照首次打开现有 Web 项目中介绍的一种步骤,从源代码管理打开该项目。
非隔离开发:创建源代码管理的 Web 项目
有关非隔离开发模式的说明及其优缺点的概述,请参阅非隔离开发。使用以下步骤创建源代码管理的 Web 项目,以进行非隔离开发。
选择 Web 访问方法
- 在 Tools(工具)菜单上,单击 Options(选项)。
- 在 Options(选项)对话框中,单击 Projects(项目)文件夹,然后单击 Web Settings(Web 设置)。
- 在 Preferred access method(首选访问方法)下,单击 FrontPage。
通过创建空白解决方案,然后在其中添加项目,可以改善项目的长期可管理性和可搜索性。您也可以维持本地项目文件与它们在源代码管理服务器上的主控副本之间的紧密对称性。
创建解决方案目录
- 在 File(文件)菜单上,指向 New(新建),然后单击 Blank Solution(空白解决方案)。
- 在 New Project(新建项目)对话框中,键入解决方案的名称和位置。
提示:指定一个可以将此项明确标识为解决方案的名称(例如 SalesWeb_Solution 或 SalesWeb_Soln)。
创建 Web 项目
- 在 File(文件)菜单上,指向 Add Project(添加项目),然后单击 New Project(新建项目)。
- 在 Add New Project(添加新项目)对话框中,选择 Visual Basic Projects(Visual Basic 项目)或 Visual C# Projects(Visual C# 项目)。
- 在右侧窗格中选择一个 Web 项目模板。
- 在 Location(位置)框中,键入 http://servername/projectname(其中 servername 是 Web 服务器的名称,projectname 是新建项目的名称),然后单击 OK(确定)。
现在,您可以将该 Web 项目添加到源代码管理,以便您的队友在开发中使用。
注意:如果您已经安装了 FrontPage Server Extensions 2002,以下某些步骤可能会略有不同。
为 FrontPage Web 项目打开外部源代码管理
- 右键单击“我的电脑”,单击 Manage(管理),然后单击 Services and Applications(服务和应用程序)。
- 打开 Internet Information Services(Internet 信息服务),然后展开 Default Web Site(默认 Web 站点)。
- 右键单击 FrontPage Web 项目所在的 Web,然后单击 Properties(属性)。
- 在 Properties(属性)对话框中,单击 Server Extensions(服务器扩展)选项卡,将 Version Control(版本控制)框设置为 Use External(使用外部),然后单击 OK(确定)。
- 对于可能显示的所有警告消息,均单击 OK(确定)。
至此,项目已准备就绪,可以进行开发。现在,每个项目开发人员都必须按照首次打开现有 Web 项目中介绍的一种步骤,从源代码管理打开该项目。
首次打开现有 Web 项目
本节可以帮您确定如何从源代码管理打开 Web 项目,并确定保存工作副本的最佳位置(适用于文件共享 Web 项目)。回答下表中的问题并向其他项目开发人员咨询,以确定首次打开现有的、源代码管理的 Web 项目的最佳方法。
图 7:确定打开源代码管理的 Web 项目的方式
注意:对于正在打开文件共享 Web 项目(对第一个问题做出肯定回答)的开发人员而言,需要询问项目所有者保存工作副本的位置。对于隔离开发,请将其保存在 http://localhost/projectname 中。对于半隔离开发,请使用非本地主机 URL 保存工作副本。
隔离开发:首次打开 Web 项目
- 在 File(文件)菜单上,单击 Source Control(源代码管理),然后单击 Open from Source Control(从源代码管理打开)。
- 在相应的源代码管理数据库中找到要打开的 Web 项目,然后单击 OK(确定)。
- 当系统提示您提供本地工作副本的位置时,键入 http://localhost/projectname,其中 projectname 与源代码管理的主控副本的名称相同。
注意:下次打开该项目时,请不要使用 Open from Source Control(从源代码管理打开)命令,而应与打开任何其他项目一样使用 Open Project(打开项目)命令。
半隔离开发:首次打开 Web 项目
- 在 File(文件)菜单上,指向 Source Control(源代码管理),然后单击 Open from Source Control(从源代码管理打开)。
- 在相应的源代码管理数据库中找到要打开的 Web 项目,然后单击 OK(确定)。
- 当系统提示您提供本地保存位置或工作副本位置时,键入 http://servername/projectname_myname,其中 servername 是共享 Web 服务器的名称,projectname 与源代码管理的主控副本的名称相同,_myname 是您的姓名或首字母缩写。
注意:下次打开该项目时,请不要使用 Open from Source Control(从源代码管理打开)命令,而应与打开任何其他项目一样使用 Open Project(打开项目)命令。
非隔离开发:首次打开 Web 项目
- 在 File(文件)菜单上,单击 Open(打开),然后单击 Project from Web(Web 项目)。
- 如果系统显示 Web Access Failed(Web 访问失败)对话框(通常会显示此对话框),请单击 Try to open the project with FrontPage Server Extensions(尝试使用 FrontPage Server Extensions 打开项目)按钮。
注意:下次打开该项目时,请不要使用 Project from Web(Web 项目)命令,而应与打开任何其他项目一样使用 Open Project(打开项目)命令。
后台源代码管理集成
以下小节说明了当您将 Web 项目添加到源代码管理或首次从源代码管理打开项目时会出现的情况。
将 Web 项目解决方案添加到源代码管理中时,会发生什么?
当您将文件共享 Web 项目添加到源代码管理时,会出现以下情况:
下图说明了如何将项目的工作副本绑定到源代码管理下的主控副本。由于文件位于不同的根目录,因此需要为一个简单的解决方案 Web 项目对创建两个绑定。
图 8
从源代码管理打开 Web 项目解决方案时,会发生什么?
首次在 Visual Studio .NET 中从源代码管理打开文件共享 Web 项目时,会出现以下情况:
- 为解决方案文件创建了绑定。 您的提供程序要求您识别用于解决方案文件的个人工作文件夹。此操作将在源代码管理数据库中的工作文件夹和它的主控副本之间创建一个关系或绑定。根据提供程序,此过程通常包括在工作文件夹的根目录创建数据文件。这些文件的默认位置为个人 Visual Studio 项目目录。
- 解决方案文件被复制到工作文件夹。 您的源代码管理提供程序将在选定的工作文件夹中创建所有解决方案文件的工作副本。
- 设置 Web 文件的位置。 在 Set Project Location(设置项目位置)对话框中,提供程序将提示您标识解决方案中每个 Web 项目的个人工作文件夹。此操作将在工作文件夹和它在源代码管理服务器上的主控文件夹之间创建另一个绑定。
- 项目文件被复制到工作文件夹。 最后,源代码管理提供程序将在选定的工作文件夹中创建所有 Web 项目文件的工作副本。
一般提示、注意和指南
- 创建空白解决方案,然后将您的项目添加到其中。这样做,可以按照项目文件在源代码管理数据库(主控副本)中的组织方式在磁盘(工作副本)上组织项目文件。强制实施并行组织方案可以提高项目文件的长期可管理性,并使其更易于执行某些高级源代码管理操作,如分支和合并。
- 在同一 Web 服务器上将 ASP.NET 项目中的 Web 引用添加到 Web service 项目时,请使用绝对路径,例如 http://servername/WebService1。
- 在将项目添加到源代码管理后,请不要改变项目的 Web 访问方法。
- 首次从源代码管理打开 Web 项目时,请使用 File(文件)菜单的 Source Control(源代码管理)子菜单上的 Open From Source Control(从源代码管理打开)命令。以后,即可与任何非管理的 Web 项目一样,从本地磁盘打开项目:
- 对于文件共享项目和 FrontPage Web 项目,请单击 File(文件),指向 Open(打开),然后单击 Project(项目)。
- 要签出现有的源代码管理的文件共享 Web 项目,开发人员必须具有项目主控副本所驻留的 LAN 或 VPN 的访问权限。
- 如果您要将膝上型计算机带回家在晚上使用,请务必在断开网络连接前签出要编辑的文件。千万不要通过 Visual SourceSafe 使用脱机签出。
- 在开发 FrontPage Web 项目时,使用 Use External(使用外部)版本控制选项要优于使用 Built in(内置)选项。Use External(使用外部)可以提示 Visual Studio 将每个签入的版本保存到源代码管理数据库中,而 Built in(内置)则不提示。有关详细信息,请参阅非隔离开发。
- 尽可能允许共享签出。
- 在对包含 Web 项目的解决方案执行源代码管理操作时,如果可能,应当对整个解决方案执行此操作。例如,如果您要签出 ASP.NET Web 应用程序项目,请签出其解决方案。
- 仅使用源代码管理提供程序的独立版本执行在 IDE 中无法完成的操作(例如,分支和合并分支)。
- 使用动态 URL 引用。有关详细信息,请参阅附录 A:设置动态 URL Web 引用。
- 如果您的源代码管理提供程序为 Visual SourceSafe,那么只要可能,请始终使用 ANSI 编码保存 Web 页。
- 不要将解决方案文件的工作副本存放到 IIS Web 服务器上。
- 如果您使用 FrontPage 访问在服务器的 FAT 或 FAT32 分区上创建的 Web 应用程序,源代码管理将无法正常工作。由于 FAT 分区无法提供足够的安全环境,因此所有操作都将通过同一个访客帐户 IUSR_Machinename 来执行。这样,在您尝试执行签入或签出操作时,将导致您的文件错误地显示为以独占方式签出给了其他用户。通过在 IIS 管理工具中禁用对项目的匿名访问,可以解决这个问题,不过这种解决方法并不受支持。因此,强烈建议您将 FAT 分区转换为 NTFS 文件系统。
常见问题
- 用什么方法可以将我的 Web 应用程序部署到 Web?
- 从源代码管理获取最新版本,根据需要合并更改,签入您所做的更改,然后使用 Copy Project(复制项目)命令将所有项目文件的主控副本复制到相应的生产服务器位置。有关详细信息,请参阅附录 C:部署 Web 项目。
- 每次项目位置发生变化时,我的团队怎样才能避免删除而后又添加项目的同一 Web 引用?
- 您可以将 Web 项目配置为接受动态 URL Web 引用。有关详细信息,请参阅附录 A:设置动态 URL Web 引用。
- 在创建 Web 项目时,为什么会出现那么多对话框?为什么必须对项目位置设置两次?
- 您可能已经注意到,当您创建没有解决方案的新项目时,Visual Studio 将为您创建一个新的解决方案。包含 Web 项目的解决方案与包含非 Web 项目的解决方案并无差异。也就是说,它们最初都包含两个文件(solutionname.sln 和 solutionname.suo),并且在默认情况下,这两个文件被保存到磁盘上 Visual Studio 项目所在的位置。另一方面,Web 项目文件必须保存到虚拟目录中。
只要您添加两项或多项(例如,解决方案文件和项目文件),您的源代码管理提供程序就会在这些项的根目录中创建一个链接文件。如果这些项共享一个根目录,则提供程序将在最低一级的公共根目录中创建链接文件。如果这些项不共享公共根目录,例如,一些项驻留在磁盘上,而另一些项驻留在虚拟内存中,提供程序将在两个位置都创建链接文件。因此,当您将 Web 项目解决方案添加到源代码管理时,提供程序会两次提示您标识工作文件夹,一次用于标识解决方案,另一次用于标识项目。
- 通过什么方法可以自动通知团队成员有关 Web service 的更改,以确保及时刷新所有客户端引用?
- Visual Studio .NET 不提供这类工具。编辑 Web service 的团队成员必须亲自通知其他团队成员有关的更改。
- 我所在的团队有四个开发人员,其中两个开发人员的工作位置在企业网络范围以外。在开发 Web 应用程序项目时,我们应当使用哪种协作开发模式?
- 使用非隔离开发模式。
Visual InterDev 开发人员的常见问题
- 在 Visual Studio .NET 中,我的团队是否能够在本地模式下工作?在 VID 中,每个开发人员都脱机工作,将所做的更改保存到本地工作副本中,然后再更新主服务器版本。在 Visual Studio .NET 中也可以这样做吗?
- 可以。与 IDE 中的明确标识不同,在 Visual Studio .NET 中协作开发 Web 项目时,本地模式为默认使用的方法。要使用本地模式,请使用隔离或半隔离开发模式。
- 在 Visual Studio .NET 中,我的团队是否能够在主控模式下工作?
- 可以。您可以将您的 Web 访问模式设置为 FrontPage,并使用非隔离开发模式。不过,在已编译的 ASP.NET 环境中,对于团队开发,通常并不推荐使用非隔离模式。有关详细信息,请参阅非隔离开发。
- 在 Visual Studio .NET 中,如何将我的工作副本发布到主服务器上或者将更改同步到主服务器上?
- 与 VID 不同,Visual Studio .NET 中没有 Release Working Copy(发布工作副本)命令。要在 Visual Studio .NET 中更新生产服务器(主服务器),必须使用几种方法之一对其进行部署。部署 ASP.NET 项目的第一步是更新源代码管理的主控副本。第二步是将项目文件复制到生产服务器。有关详细信息,请参阅部署 Web 项目。
- 怎样才能象在 VID 中那样从源代码管理删除我的项目?
- 在 File(文件)菜单上,单击 Source Control(源代码管理),然后单击 Change Source Control(更改源代码管理)。在 Change Source Control(更改源代码管理)对话框中,从源代码管理选择要删除的项目,然后单击 Disconnect(断开连接)。
- 工作副本这一术语在 Visual Studio .NET 中的含意与在 VID 中的含意相同吗?
- 并不完全相同。在 VID 中,工作副本是指您具有写入权限的 Web 的版本。在本地模式中,您的本地版本为工作副本。在主控模式中,您的主控副本为工作副本。
对于 Visual Studio .NET 中的文件共享 Web 项目,工作副本始终为您的个人版本。对于 FrontPage Web 项目(请参阅非隔离开发),所有团队成员都将更改保存到同一主控副本中。
- 在我的工作副本(本地版本)上工作时,如何将我的更改同步到服务器?
- 如前文所述,只有文件共享 Web 项目才存在工作副本。在文件共享项目中,主控副本驻留在源代码管理数据库中,且无法使用浏览器进行访问。要使对工作副本所做的更改与源代码管理的主控副本同步,请从源代码管理获取最新的版本,在 Visual Studio 中生成项目,然后签入该项目。
附录 A:设置动态 URL Web 引用
如果您创建的解决方案既包含 XML Web service,又包含 ASP.NET Web 项目,且从您的 ASP.NET 项目引用 XML Web services,则 Web 引用对您有效,而对其他用户无效。
团队成员不能总是共享 Web 引用,因为 Visual Studio 在 Web.config 文件中将这些引用存储为静态、硬编码的字符串。如果所有团队成员都将自己的工作副本的项目位置设置为 http:/localhost/projectname,就不会发生这个问题,因为这样做可以有效地指定物理位置的相对路径 http://computername/projectname。
对于非本地主机项目,您可以通过将项目的 Web.config 文件中的静态 Web 引用 URL 转换为动态属性来解决这个问题。您应使用动态属性配置应用程序,以便该属性的部分或全部属性值都存储在外部配置文件中,而不是存储在应用程序的已编译代码中。
提示:由于您或任何其他用户都可以在运行时更改属性值,因此,可以使用动态属性迅速而方便地测试不同的 Web services。
您还可以使用动态属性,使您的 Windows 应用程序更加易于测试、部署和管理。有关详细信息,请参阅 Introduction to Dynamic Properties(英文)。
以下步骤说明了在团队开发环境中,当引用调用项目所在的同一服务器上的 Web service 时,如何有效地共享 Web 引用。这些步骤假定您已经在名为 Server1 的服务器上创建了一个名为 WebApplication1 的文件共享 Web 项目和两个 Web services(WS1 和 WS2),还假定您已经将一个 Web 引用添加到了引用 WS1 的 WebApplication1。
提示:通过打开 Service1.asmx,切换到代码视图,然后从 Hello World 示例的相应代码行中删除注释,可以迅速创建 Web service。为了在运行时区分这两个服务,请在它们各自的文件中将“Hello World”更改为“Hello World: WS1”和“Hello World: WS2”。
在源代码管理下使 Web 引用 URL 可动态配置与共享
- 在 Solution Explorer(解决方案资源管理器)中,展开 Web References(Web 引用)文件夹,并选择相应的服务。
- 在 Properties(属性)窗口中,将 URL Behavior(URL 行为)的值从 Static(静态)更改为 Dynamic(动态)。
假定您的 Web service 返回某种类型的内容,Visual Studio 会自动将以下代码添加到项目的 Web.config 文件中:
' Visual Basic
// C#
<appSettings>
<add key="WebApplication1.Server1.Service1" value="
http://Server1/WS1/Service1.asmx" />
</appSettings>
在此示例中,关键字属性标识 Web 引用的名称,而值属性标识引用的目标。
- 在 Solution Explorer(解决方案资源管理器)中,右键单击 WebApplication1,指向 Add(添加),然后单击 Add New Item(添加新项)。
- 在 Add New Item - WebApplication1(添加新项 - WebApplication1)对话框中,选择 Text File(文本文件)。
- 在 Name(名称)框中,键入 User.config,然后单击 Open(打开)。
- 在 User.config 文件中,粘贴以下代码:
<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="WebApplication1.Server1.Service1.asmx"
value="http://localhost/ws1/Service1.asmx"/>
</appSettings>
- 打开 Web.config,将
<appSettings>
更改为 <appSettings file="user.config">
,然后删除 <appSettings>
开始和结束标记之间的所有代码。
现在,您已经拥有了一个个人配置文件,它将覆盖 Web.config 文件中的公共设置。
注意:如果您的项目受源代码管理,则应当右键单击 User.config 并单击 Exclude from Source Control(从源代码管理排除)。User.config 文件包含您的个人配置设置。
当另一个用户从源代码管理打开 WebApplication1 并尝试生成应用程序时,WS1 将显示为不可访问。此问题在于源代码管理的公共 Web.config 文件引用的是您的个人 WS1 工作副本的存储位置。要使 WS1 自动成为其他用户可访问的对象,请指示这些用户创建自己的个人配置文件(并确保不会将这些配置文件添加到源代码管理)。每一个打开您的 WebApplication1 项目的开发人员都必须执行以下步骤。
在团队中共享 Web 引用
- 在 Solution Explorer(解决方案资源管理器)中,右键单击 WebApplication1,指向 Add(添加),然后单击 Add New Item(添加新项)。
- 在 Add New Item - WebApplication1(添加新项 - WebApplication1)对话框中,选择 Text File(文本文件)。
- 在 Name(名称)框中,键入 User.config,然后单击 Open(打开)。
- 在 User1.config 文件中,粘贴以下代码。
<?xml version="1.0" encoding="utf-8"?>
<appSettings>
<add key="WebApplication1.Server1.Service1.asmx"
value="http://localhost/ws1/Service1.asmx"/>
</appSettings>
- 打开 Web.config 文件,并将
<appSettings>
更改为 <appSettings file="user.config">
。
运行时在 Web services 间切换
动态 URL 除了使您能够更加方便地共享 Web 引用外,还使您能够迅速地在两个或多个 Web services 之间进行切换。动态属性存储在一个配置文件中,任何人都可以在运行时访问该文件。也就是说,您可以通过编辑公开使用且尚未编译的资源(User.config 文件),在运行时更改应用程序的行为。以下步骤是一个简短的演示。
运行时在 WS1 和 WS2 之间进行切换
- 在 WebApplication1 中,打开 WebForm1.aspx,然后将 Label 控件从工具箱拖放到设计器上。
- 双击设计器切换到代码视图,然后将下列代码粘贴到 Page_Load 事件处理程序:
Server1.Service1 a = new localhost.Service1();
Label1.Text = a.HelloWorld();
- 生成 WebApplication1。
如果您执行了前面过程中的所有步骤,则可以看到 Hello World: WS1。
- 在代码编辑器打开 C:\Inetpub\wwwroot\WebApplication1\User.config。
- 将
value="http:/localhost/ws1/Service1.asmx
" 更改为 value="http:/localhost/ws2/Service1.asmx
" 并保存更改。
下次运行 WebApplication1 时,就可以看到“Hello World: WS2”,而不是“Hello World: WS1”了。
附录 B:更改 Web 访问方法
更改项目的 Web 访问方法将从根本上改变您和您的团队伙伴在源代码管理下与主控副本进行交互的方式。建议将 FrontPage 项目升级为文件共享。只在绝对必要时,才将文件共享项目转换为 FrontPage Web 访问方法。在执行下列任何步骤之前,请确保您要更改的所有项目版本都已签入源代码管理中。
选择以下链接之一,进一步了解如何更改 Web 项目的 Web 访问方法:
从 Visual InterDev 项目升级到文件共享
您可以将源代码管理的 Visual InterDev (VID) Web 升级到 ASP.NET,以便使用文件共享 Web 访问方法从源代码管理进行访问。
注意:这一过程可以在源代码管理下有效地将您的 VID 项目分叉为两个项目。您仍然可以在项目的早期版本上查看历史记录和执行源代码管理操作,但只能通过在源代码管理中打开 VID 项目来完成。
从 Visual InterDev 项目升级到文件共享
- 打开 Visual Studio .NET,单击 Tools(工具),然后单击 Options(选项)。
- 在 Options(选项)对话框中,单击 Projects(项目)文件夹,然后单击 Web Settings(Web 设置)。
- 在 Preferred access method(首选访问方法)下,单击 File share(文件共享),然后关闭对话框。
- 在 Visual Studio .NET 的 File(文件)菜单上,指向 New(新建),然后单击 Project(项目)。
- 在 New Project(新建项目)对话框中,在左侧窗格中选择一种语言(Visual Basic 或 C#),在右侧窗格中单击 ASP.NET Web Application(ASP.NET Web 应用程序),键入位置(例如 http://localhost/MyNewWeb),然后单击 OK(确定)。
- 最小化 Visual Studio .NET IDE,启动 Visual SourceSafe Explorer,然后打开包含 VID 项目文件的 SourceSafe 数据库。
- 打开您的 Web 项目文件夹,在 Contents(目录)窗格中选择所有源文件,指向 SourceSafe,然后单击 Get Latest Version(获取最新版本)。
- 在 Get(获取)对话框中,以 ASP.NET Web 应用程序路径(例如 c:\inetpub\wwwroot\MyNewWeb)替换 To(到)框中的所有文本,选择 Make Writable(使可写),然后单击 OK(确定)。
- 在 Visual Studio .NET 中,选择您的项目,并在 File(文件)菜单上单击 Add Existing Item(添加现有项)。
- 在 Add Existing Item(添加现有项)对话框中,打开 Web 项目的工作文件夹,选择刚刚从源代码管理复制的所有文件,然后单击 Open(打开)。
- 在 Solution Explorer(解决方案资源管理器)中右键单击解决方案节点,然后单击 Add Solution to Source Control(将解决方案添加到源代码管理)。
从 FrontPage 升级到文件共享
将在 Visual Studio .NET 中创建的 FrontPage Web 项目升级为建议的文件共享 Web 访问方法,可以:
- 提高团队的 ASP.NET Web 应用程序资源的日常可管理性和完整性。
- 使用不同于 Visual SourceSafe 的源代码管理提供程序。过去,只有 Visual SourceSafe 这一源代码管理提供程序能够管理 Web 项目。现在,许多第三方源代码管理应用程序都支持文件共享 Web 访问方法。
在下面的步骤中,将使用 Internet 信息服务 (IIS) 管理控制台禁用 FrontPage Web 项目的源代码管理集成,然后使用 Visual Studio .NET 更改 Web 访问方法并重新将项目绑定到源代码管理下。
禁用 FrontPage Web 项目的源代码管理
- 右键单击“我的电脑”,单击 Manage(管理),单击 Services and Applications(服务和应用程序),打开 Internet Information Services(Internet 信息服务),然后展开 Default Web Site(默认 Web 站点)。
- 右键单击 FrontPage Web 项目所在的 Web,然后单击 Properties(属性)。
- 在 Properties(属性)对话框中,单击 Server Extensions(服务器扩展)选项卡,将 Version Control(版本控制)框设置为 None(无),然后单击 OK(确定)。
- 对于可能显示的所有消息,均单击 OK(确定)。
现在,打开 Visual Studio .NET,将 Web 访问方法更改为文件共享,然后将项目重新绑定到源代码管理下的个人工作文件夹。
更改 Web 访问方法并重新绑定项目
- 在 IDE 的 File(文件)菜单上,指向 Open(打开),单击 Project from Web(Web 项目),输入您的 Web 项目的 URL,然后单击 OK(确定)。
- 在 Solution Explorer(解决方案资源管理器)中,右键单击该项目,然后单击 Properties(属性)。
- 在 Project Properties(项目属性)对话框的 Common Properties(公共属性)下,选择 Web Settings(Web 设置),然后将 Web Access Mode(Web 访问模式)的值更改为 File Share(文件共享)。
- 在 Visual Studio 中,先关闭 Web 项目及其解决方案,然后重新打开。
- 在 Solution Explorer(解决方案资源管理器)中,选择该项目,在 File(文件)菜单上指向 Source Control(源代码管理),然后单击 Change Source Control(更改源代码管理)。
- 在 Change Source Control(更改源代码管理)对话框中,选择您的项目,单击 Bind(绑定),然后单击 OK(确定)。对于显示的所有警告消息,均单击 OK(确定)。
注意:您必须将解决方案和项目重新绑定到它们先前的保存位置,以保持源代码管理历史记录的连续性。
- 在 Solution Explorer(解决方案资源管理器)中,右键单击该项目,单击 Check Out(签出),对于随后显示的警告消息,单击 OK(确定)。
- 当显示“Your folder contains a writable copy of project path”(您的文件夹包含 project path 的可写副本)消息时,请选择 Leave this file(保留此文件),然后单击 OK(确定)。
- 在 Solution Explorer(解决方案资源管理器)中,右键单击该项目,然后单击 Check In(签入)。
将文件共享项目转换为 FrontPage
在将文件共享 Web 项目转换为 FrontPage Web 访问方法之前,请认真考虑替代方案。转换为 FrontPage,可以:
- 访问由 .NET Passport 身份验证保护的设计时项目资源。
- 连接到或允许访问防火墙后的项目,包括一个或多个团队成员无法通过 LAN 或 VPN 访问的项目。
从文件共享转换为 FrontPage Web 访问方法
- 在 Solution Explorer(解决方案资源管理器)中选择 ASP.NET Web 项目。
- 在 File(文件)菜单上,指向 Source Control(源代码管理),然后单击 Change Source Control(更改源代码管理)。
- 在 Change Source Control(更改源代码管理)对话框中,选择您的 Web 项目,然后单击 Unbind(取消绑定)。
- 对 Change Source Control(更改源代码管理)列表中的每一项都重复此步骤,接受显示的所有消息,然后单击 OK(确定)。
- 在 Solution Explorer(解决方案资源管理器)中,右键单击要转换的 Web 项目,然后单击 Properties(属性)。
- 在 Project Properties(项目属性)对话框中的 Common Properties(公共属性)下,选择 Web Settings(Web 设置),然后将 Web Access Mode(Web 访问模式)的值更改为 FrontPage。
- 选择解决方案,并在 File(文件)菜单上,单击 Close Solution(关闭解决方案)。
现在,您可以为 FrontPage Web 启用源代码管理。以下过程中的某些步骤可能与 FrontPage Server Extensions 2002 中的步骤有所不同。
为 FrontPage Web 项目打开外部源代码管理
- 右键单击“我的电脑”,单击 Manage(管理),然后单击 Services and Applications(服务和应用程序)。
- 打开 Internet Information Services(Internet 信息服务),然后展开 Default Web Site(默认 Web 站点)节点。
- 右键单击 FrontPage Web 项目所在的 Web,然后单击 Properties(属性)。
- 在 Properties(属性)对话框中,单击 Server Extensions(服务器扩展)选项卡,将 Version Control(版本控制)框设置为 Use External(使用外部),然后单击 OK(确定)。
- 对于可能显示的所有警告消息,均单击 OK(确定)。
附录 C:部署 Web 项目
Visual Studio .NET 提供了多种功能强大的部署工具,包括 Web 设置和部署项目。以下过程介绍了一种简单方法,可以将主控副本(位于源代码管理数据库)中的更改推广到其生产服务器位置。有关其他 Visual Studio .NET 部署替代方案的详细信息,请参阅 Methods of Deployment(英文)。
对于 Web 项目,可以使用 Project(项目)菜单上的 Copy Project(复制项目)。复制项目(而不是部署项目)是将项目内容移到目标 Web 服务器上的一种简便方法。不过,复制操作不能自动配置 Internet 信息服务 (IIS) 目录设置。因此,在大多数情况下,我们建议您部署项目,因为它使您能够利用许多部署项目管理功能,如注册和 IIS 配置。
默认情况下,Copy Project(复制项目)命令将在目标服务器上创建新的 Web 应用程序,并且只将需要运行的文件复制到该应用程序。目标服务器上必须安装 FrontPage Server Extensions,才能使用 Copy Project(复制项目)命令。另外,请注意您用来部署项目的 Web 访问方法与 Visual Studio 中项目的 Web 访问方法完全不相关,也不会更改后者。以下步骤将通过 HTTP 部署 Web 应用程序。
部署 ASP.NET Web 项目
- 在 Project(项目)菜单上,单击 Copy Project(复制项目)。
- 选择目的地项目文件夹和服务器。
- 单击 FrontPage 按钮。
注意:在此环境中,FrontPage 是默认的选项,也是建议使用的选项。如果您使用 File share(文件共享)选项,请使用以下语法设置 Path(路径):\\servername\wwwroot$\projectname。
- 选择要复制的文件。
默认选项只部署运行应用程序所需的文件。您还可以部署所有项目文件或项目文件夹中的所有文件。
其他信息
XML Web Services Infrastructure(英文)
Team Development Guide(英文)
Walkthrough: Deploying a Web Solution(英文)
Upgrading Visual InterDev 6.0 Applications to Visual Studio .NET(英文)
Converting ASP to ASP.NET(英文)
Migrating to Web Forms(英文)
准备将 Visual Basic 6.0 应用程序升级到 Visual Basic.NET
使用 Visual Studio .NET 开发 Web 项目的远程服务器配置
Deployment Changes in Visual Basic .NET(英文)
Authentication in ASP.NET: .NET Security Guidance(英文)
父窗体脚本:
<script language="javascript" id="clientEventHandlersJS">
function InsertPicture()
{
var CPicture = showModalDialog("UPLoadPicture.asp", "", "dialogWidth:18.5em; dialogHeight:7em; status:0");
if(CPicture && CPicture!=0){
IDPicture.innerHTML="<IMG SRC='" + CPicture + "' BORDER='0' width='100' height='120'>"
Form1.LoadPic.value=CPicture;
}
}
</script> 子窗体脚本(返回值):
<script language="javascript">
var ReturnData="0";
function Exchange(CID)
{
if(upd.style.display=="none"){Htm.style.display="none";upd.style.display="block";return;}
if(CID!=""){ReturnData=CID;}
window.returnValue = ReturnData;
window.close();
}
</script> 完整例子请参考这里:
http://www.happylogistics.cn/chinese/rczx/zxzp.asp进入后点击表格照片位置的文字链接“
点击这里上传照片”
《中华人民共和国婚姻法》第七条规定:“有下列情形之一的禁止结婚:(一)直系血亲和三代以内旁系血亲:……。”直系血亲是指有真接血缘关系的亲属,即生育自己和已身所生育的上下各代亲属。包括已身从出的的直系长辈血亲和从已身所出的直系晚辈血亲。如父母与子女、祖父母与孙子女、外祖父母与外孙子女等,你们显然不是这种情况。旁系血亲是指具有间接血缘知道关系的亲属,即非直系血亲而在血缘上和自己同出一源的亲属。包括在辈分上相当于或高于父母的旁系长辈血亲,在辈分上相当于或低于子女的旁系晚辈血亲以及在辈分上同自己相当的同辈旁系血亲。
我国现行婚姻法是以血亲之间的世代来计算亲属关系远近的。世代计算法一辈为一代,在计算直系血亲时,以已身为一代,然后由乙身向上或向下数,向上数至父母为二代,数至祖父母为三代;向下数至子女为二代,数至孙子女为三代,依此类推。在计算旁系血亲时须根据旁系血亲之间的同源关系确定世代,同源于父母的为两代以内旁系血亲,同源于祖父母、外祖父母的,为三代以内旁系血亲,依此类推。所谓三代以内旁系血亲是指同源于祖父母、外祖父母(与已身相对而言)的旁系血亲。无论辈分是否相同,只要同源于祖父母、外祖父母的旁系血亲,都是三代以内的旁系血亲。辈分相同的有兄第姐妹、堂兄第姐妹、表兄第姐妹;辈分不同的有伯、叔、姑与侄子,舅、姨与外甥子女。超出这个范围,就不属于三代以内旁系血亲了。计算旁系血亲代数的具体方法是:从两个旁系亲属分别往上数至双方同源血亲,其本身为一代,如果两边数目相等,则任何一边的数目即为他们的代数;如果两边数目不相等,则以大的数目为其代数。
// TMD.cpp
// a program written by one of my friends in Microsoft
// last updated by dell
#include "boy.h"
#include "girl.h"
#define AND &&
RESULT love(boy, girl)
{
if( boy.有房() AND boy.有车() )
{
boy.Set(Nothing);
return girl.嫁给(boy);
}
else if( girl.愿意等() )
{
next_year:
for( day=1; day<=365; day++)
{
if( day == 情人节 )
if( boy.GiveGirl(玫瑰) )
girl.感情++;
else
girl.感情--;
if( day == girl.生日)
if( boy.GiveGirl(玫瑰) )
girl.感情++;
else
girl.感情--;
boy.拼命赚钱();
}
年龄++;
girl.感情--;
if( boy.有房() AND boy.有车() )
{
boy.Set(Nothing);
return girl.嫁给(boy);
}
else if( boy.赚钱 > 100,000 AND girl.感情 > 8 )
goto next_year;
else
return girl.goto( another_boy);
}
return girl.goto( another_boy);
}
"^\d+$" //非负整数(正整数 + 0)
"^[0-9]*[1-9][0-9]*$" //正整数
"^((-\d+)|(0+))$" //非正整数(负整数 + 0)
"^-[0-9]*[1-9][0-9]*$" //负整数
"^-?\d+$" //整数
"^\d+(\.\d+)?$" //非负浮点数(正浮点数 + 0)
"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$" //正浮点数
"^((-\d+(\.\d+)?)|(0+(\.0+)?))$" //非正浮点数(负浮点数 + 0)
"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$" //负浮点数
"^(-?\d+)(\.\d+)?$" //浮点数
"^[A-Za-z]+$" //由26个英文字母组成的字符串
"^[A-Z]+$" //由26个英文字母的大写组成的字符串
"^[a-z]+$" //由26个英文字母的小写组成的字符串
"^[A-Za-z0-9]+$" //由数字和26个英文字母组成的字符串
"^\w+$" //由数字、26个英文字母或者下划线组成的字符串
"^[\w\u4E00-\u9FA5]+$" //由汉字、数字、26个英文字母或者下划线组成的字符串
"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$" //email地址
"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" //url
看到一片好文章 实在不忍独吞 就和大家分享 希望对大家购机 (尤其是购二手机)或者了解IBM的机型 有所帮助 。
“笔记本不同于台式机,台式机你可以拆开看看,里面的配件老化情况,或是根据自己的需要,更换一下配件,但是本本不成,一般的来说,出厂是什么样子,到了你的手上就是什么样子。而且在你选购本本的时候,基本上不能开机看里面的情况,只能看一下外观是不是很新,屏是不是很亮,其它的基本上你看不到的。所以在买本本以前,必要的充电是绝对必要的:)
IBM的分类是从600系列开始的,在这之前的本本,在市场上你还可以买到的有560系列。390系列,还有770这个本本,不过这些一是年头太久了,二是想换配件什么也不方便,所以不在这次的讨论范围内,这次是从600系列开始讲起:)
键盘的经典600X
600 600E 600X这个时代的机器已经超出了他的时代的范畴,其设计的理念超过其它厂商太多,如果放到现在不知道会是怎么一个情况,但是在当时,只要是用过了这个系列的机器的朋友,基本上都死心踏地的成为了IBM的死忠FANS:)
600系列的设计在600X P3 650这一款上达到了极致,不管是键盘手感,还是说机身的设计都达到了顶峰。机器上所有的端口的外面都有保护的东西,屏慕也是很结实,合上以后,四四方方的,年青人可能不喜欢这种沉稳的设计,但是对于商务人士,办公用都,沉稳一些,本身就是一种象征。
这个时期的本本配置
600 P2 300 32 4G 24X 13.3XGA
600E P2 300-400 32-64 4G-10G 24XCD-DVD 13.3XGA
600X P3 450-650 64 6G-12G 24X-DVD 13.3XGA
选购这些本本的时候,不要总想着,原厂原厂的,因为这么久远的机器了,可以说市场里有的,已经全部都是拼装机了,不过为什么还要大家选购这些机器呢,大家可以做一下对比,同样是本本,你敢拆IBM的机器,拆N次也没关系,其它品牌的呢。国产的就不用说了,就是COMPAQ DELL HP这些,其维护的方便性,和IBM也是没有法比的。
IBM敢于在出本的时候,就为用户提供拆机手册,让用户可以自己按说明对本本进行拆装,好像其它品牌的现在还不敢这么做的说,高质高价,这是IBM的一贯准则,虽然现在其品质相对而言有下降,但是仍然是用户的第一选择:)
看机器的时候,先看屏,尽量找亮白的这种,这样的机器一般是换过灯管的机器,虽然也是商家换的,但是因为商家都有专门的工作人员进行更换,所以就是换过了,也可以换的比较好,不容易出现漏光,或是光度不均匀的情况,再看就是外壳有没有损伤,因为这个机器一拼装起来的话,好多东西没有办法保证可以拼装的特别到位,所以在购买的时候,一定要认真检查,把所有的端口都看到:)
其它的就没有什么了,硬盘这个机器上配的一般都是老型号了,能换掉就尽量换掉,能退给商家就尽量退给商家,因为太老的东西,其使用寿命已经达到了极点了,买回来用不多长时间也要更换,更何况,更换一块新硬盘,也可以让机器的性能得到显著提高:)最少,晚上不会响到影响别人休息。呵呵。
这一时期IBM其它的本本还有以下几个,570系列,也就是现在X系列的前身。这种本本性能在当时十分的好,13.3XGA屏的机器,确可以作到1.8KG,并且加上底座以后的扩展能力很强,不好的地方是,这个机器的屏很薄,也不容易更换,还有就是,这个机器屏的转轴这个位置特别容易松,在用过一段时间以后就会松的让人受不了。在专门网上有网友讨论过如何使这个屏轴不松的方法,有兴趣的朋友可以到那里去看看。个人的意见是,如果要想买个小机器用的话,还是加点米,买X20吧:)
----------------------------------------------
时代的变迁,T系列的时代。
随着笔记本CPU进入P3时代,靠着600X打天下已经不能满足客户的需求。这个时候IBM起用全新设计,全新材料推出了T系列历史上最受争议的T20。对于这个机器,可以真的说是仁者见仁,智者见智。说他好的,就是全都,说他不好的就是全盘否定。
实际上来说,T20好的地方在于,他14.1XGA的显示器,让文本显示很舒服,办公起来也很方便。键盘灯的加入让人体验到了IBM以人为本的设计,U2K光驱的设计,使的T系列保持了和600系列一样的扩展能力,扩展钨也是一样。
不好的地方就是这几点,一,键盘,用过600的用户在刚刚用T20的时候没有一个不说次的,键盘键程太短,让人感觉很不舒服。散热问题不好,用一会儿就会让人感觉到很热,还有就是显卡,这也是T系列机器的通病,这个直到T30才改用ATI的显卡,在这之前,2X用的都是S3的显卡,S3的显卡,在3D上的ATI的不想上下,但是在2D回放上面,就明显不如ATI的好,最直观的就是同一时间的COMPAQ DELL用的都是ATI RAGE128。这个显卡性能上是这一时期综合能力最好的,呵呵。
终合来说,20还是不错的,从这个时期开始IBM的商务机就一直延续20上的设计,直到现在的T41P上,还是有好多这些设计,只不过是会有一些细微的差别上。
T23。经典再现。
由于20 21 22这几个机器的散热问题,键盘键程短的问题,用户一直是颇有微词,直到T23的出现。全新的830MP的主板,PC133内存的使用,133M的总线。这些使得T23在性能上遥遥领先于T22。T23。主频从866起,最高可以到P3 1.2G的,内存最大可以升级到1G。硬盘也换上了新款的40GN系列的,噪音小了,性能强了,在外观上,T23上现盖结合的特别紧。给人的感觉就是,平凡的外观,丰富的内涵。没有什么花哨的功能,有的只是以人为本的设计的极致,这款本本推出到现在,已经有3年了,但是仍然有N多的网友对他的性能赞不绝口。一直以来,网上最好出的,也就是这款T23。最高配的5LU 9LU,P3 1.13G 256 30G DVD 14.1SXGA+ WIFI。几乎所有实用的功能这款本本上面已经集全,不常用的,像是BT。安全芯片,这些只是一些订制的机器上面才有。
S3 SAVEGE4的显卡,虽然没有换芯,但是由于CPU主频的提高,这机器已经可以提高到非常高的性能了。
但是事情都没有完美的,T23再好,可是与同期的COMPAQ N600C比,在显卡上永远也比不过N600C ,显卡,一直就是T23玩家难以舍弃的痛。同期的N600C,电池时间要强于T23。键盘手感不比23差多少。音响效果好,到底是JBL的。显卡,ATI 雷7500 16M/32M。同时拿23的N600C比,做为我,可能我会选择N600C,因为好的显卡,可以让我在观看DVD时得到的视觉享受更多,好的音响,可以在听歌的时候更加入心,N600C和T23比,差别只是在于用户的认知适度上,不过是金子就会发光的,现在的二手市场上又会有一批23 600C出现,到时候,如果米空米不空了,就搞台N600C来用用。呵呵。做为办公用机,还是特别好的:)
T30,时代的错误。
怎么说呢,我是怎么也喜欢不起来T30 P4的CPU,时间巨短的电池 ,电源键的艰涩。厚重的身材,除了显卡,IBM在T系列的机器上第一次使用ATI的显卡,使得T30的显示效果极好。
但是对于这个机器,我是说不出太多的感觉,也就不多写了,随后的T40 41这些还当壮年,二手市场上还很难见芳踪。也不在这篇文章的讨论范畴内,等到二手机大批上市的时候,我们再来认真讨论一下。
下面写写选上面这几款机器要注意的地方
T20 21
由于这机器已经基本上出保,所以不用多注意BIOS,不过要多看看屏,因为是老机了,所以要把机器的屏看好,要选择那种白白的,还有亮亮的,这样子的用起来舒服,看着也好看,机器要看的还有外壳是否有磨损。这个要我注意,几个边角,还要散热口,还有就是其它的几个地方,要多注意。掌拖那里一定要认真看看。因为T系列最容易坏的就是掌拖。
T22 23。这两款机器一般还都有保,所以在选机器的时候,一定要好好看看BIOS。看看SN号和BIOS里面的能不能对上,还有UUID是不是正常,如果正常,那好,按上面的来。
-----------------------------------------------
X系列的来了,呵呵。已经改正了一些小错误
说起来,现在市场上能看到的IBM轻薄系列的。从最早的535一直到最新的X40。性能上的担升是不必说了,外观上也在不断变化中,本篇就从现在市场上可以入手的,在性能上也可以满足人们正常办公要求的几款本本入手。
240系列
呵呵,外出最好的远择。主机重量只有1.3KG左右,10.4的屏,800X600的分辨率。也有高的,比如说是240Z这个用的就是1024的分辨率。
先写一下一般的配置
240 C300 64 6G 10.4SVGA。有的可以配启动软驱。不支持光盘启动,只能做好一个GHOST文件在硬盘中,呵呵,就是这点麻烦。
最高配的是日文版的240Z。这个机器的屏是XGA的屏,和S30 31一样是可以上到1024的屏。不过在10.4寸屏上看1024的分辨率。字体有点太小子,呵呵。
机器最大的优点在于接口齐全。所有需要的接口上面都有,这对于工程人员极为重要。后来的X系列的机器不好的地方就在于取消了主机上的串口和并口。这对于要做调试的工作人员简直就是无法忍受的事情 ,总不能总带着一个USB-R322的线吧,呵呵,再说了,很多这样子的设备在DOS下面也没有法用。这也是240一直到现在仍然有着极大市场的原因之一。米空现在是真米空了,不然也会找一个240的机器来用用。95%原尺寸的键盘,有着IBM一贯的良好的手感。240.真的是IBM小机器里最让人心动的机器之一。
时代在变迁,机器也在发展,很快。IBM发售了与T机同时期的X20。这款机器也和T20一样是一款承前启后的机器。
配置上是P3 600 64 12G 12.1XGA。X20的配置不同的产地不同,最早的有几款型号是C500左右的,用的是12.1SVAG的屏,800X600的分辨率在12.1的屏上显得字体有些偏大。所以如果有朋友想买X20的话。一定要选择P3 600以上的。12.1XGA这种的机器。
现在说说这个机器的优缺点。
优点,很轻,1.6KG.很PP。呵呵。12.1XGA的屏上网很舒服,键盘很爽。比同期的T系列要好些。显卡好,ATI RAGE的显卡,虽然只有4M的显存,不过ATI的显卡在文字显示。2D回放上的优势是其它任何显卡所不能比的。尤其是在于DVD回放上,色彩鲜艳。比起T系列的S3显卡,那根本不是一个量级上的。键盘灯的加入,使得是上看看小说,上上网也不会有看不清键盘的麻烦:)
缺点,没有红外,没有串口,并口。音响效果太差。和同期的COMPAQ M300比,那个音响的效果真得就可以说是惨不忍睹。只能说用来发个声音,其它的你就不要想了,想听歌,还是用耳机吧,呵呵,配上个好耳机,也会让人感觉不错的。
其实最重要的一点就是没有红外,这样子许多手机玩家在玩机的时候,就会少了很多乐趣。不过多出来个CF卡的接口,方便了许多。玩DC的朋友,拍完了PP直接取卡出来,接上去就可以用了,不用买读卡器了。
随后IBM推出的X21只是板载内存加大到了128M。CPU升级到了P3 700的,其它的基本上没有变化。这一直到了X22了出现。。。。。。。
X22。时代的王者。
IBM的机器有个不成文的惯例,T系列的机器在性能上一直要比X系列的好一些。这种现象一直到了X22出现,同时期的T23使用的是P3 1G的CPU。S3的显卡,而X22使用的是P3 800的低电压版的CPU ,但是显卡使用的是ATI 镭VE的移动版,在3D测试上,T23的性能要落后于X22。这是第一次X系列的机器在性能上超越了T系列的。X22。也因为其超强的性价比,直到现在,也仍受到众多网友的推崇。
认真分析一下X22的配置
P3 800低电压版的CPU 128M板载内存。最高可以升级到640M。830M的主板。性能上比起X21的440BX板子,可以说是提高非常大。ATI 镭VE的显卡,虽然只有区区8M的显存,但是在3D上可以说应付一些简单的3D游戏,已经绰绰有余了。CS在800的分辨率下面,跑上16个人不成问题。呵呵。最高配置的X22是带WIFI的,只要接上MINIPCI的WIFI卡,就可以无线办公:)和X31相比。X22以其6K多点的价格,良好的性能。一流的做工。完备的配件及扩展能力。一直到现在,市场上也是常有货出,虽然是二手的,但是想想,以一半的价格,完成75%以上的工作。还是蛮超值的。也是X系列机器中我最推荐的。毕竟,如果要买二手的东西,就要买性价比最高的。
之后的X23 24只是在于CPU提升了(X23用的是超低电压版的CPU,但是产量极少),尤其是X24,虽然CPU用了P3 1.13的,但是不是低电压版的,所以机器电池的使用时间比起X22要整整少了1个小时左右。
-----------------------------------------------
王者之机,A机漫谈
很多人说。A太重了,太难看了,那么大个子。又黑黑的。也不能带着到处走,买他做什么,会这样子说,是因为这些朋友没有真正来体验一下A机的魅力。没有真正感受到什么
叫做王者之风。
A系列的机器。从一出生开始。就注定了他们中的XD要出一个时候的王者。从A20M开始,到A31P结束。这其中有多少至今仍让网友难以割舍的好机。
A2OP,第一个SXGA+屏的15.1屏的机器,(有一些原厂翻新的是UXGA屏的)
A21P,第一个UXGA屏的15.1的机器。
A30P,第一个用FLEXWIEW的机器。
A31P。A系列最后的王者。P4 2.0 512 60G 5400转硬盘。UXGA FLEXVIEW屏。BT WIFI .安全芯片。R7800的显卡。可以说,P4时代的机器,在IBM所有的机器里,这个是最强悍的,也是最爽的,所有的机器的屏可视角度一般是在120度以下,(只有小日本的几家出的可视角度比较大,但是你要想到他们的作工。)
但在是这个上面。随你怎么看。当然你不能跑到后面看,那你当然是什么也看不到的:)
图象就是一个清楚,画面就是一个爽,机器就是一个棒。没得说。音响也是IBM所有机器里面最棒的,可能没有玩过这个机器的朋友没有这个体会。米空有幸把玩过一款A30的机器,放DVD时候,效果那叫一个绝。清晰的画面不说。机身前置的两个音箱的效果也是一个爽字所不能形容的,带上MM在家里,用这个机器一起看DVD最好不过了。呵呵。
我分析了一下,和以前T系列的相比,A机由于机身空间大,所以可以把音效单元做的很大,声音在发出后。在机身内回旋,出来以后的效果就特别棒,很沉稳的感觉。同一时期的TOSHIBA 5002 也有这样子的效果。但是那个机器做工一般般,这次不在讨论范畴内,下次再慢慢写TOSHIBA的机器。
A30的普通分辨率的机器的音响效果要好于A30P的,可能是在于这两个机器的音效单元放置位置不一样的原因吧。
好了,说了半天激动的话,再来慢慢分析一下A机的历史。
最早的是A20M这个机器,有用C500到P3 700不等,屏最小的是12.1的,还是SVGA的,也就是800X600的,不爽中,看到了,不要买,性价比太低。
这个价格上的机器,最爽的是C500这个,C500 128 12G DVD 15.1XGA。呵呵,3XXX的价格也不错了,想想到底是15屏的机器。一个15的液晶还要2XXX呢。如果米不多的朋友,我比较推荐上这个机器。
A20这款最高的是A20P P3 750 128 DVD 15.1SXGA+ 大约是重3.5KG.这款的有几个特殊的,就是有一批翻新的,是用的UXGA的屏,不过量极小,一般也看不到。
A21。配置就不多写了,一般都知道,只是说一下,A21 22 22P一直以来,都是BX的板子,只有到了A30。才达到了质的飞跃。换成了830M的板子,显卡也由ATI RAGE ATI RAGE 128升级到了 镭VE。尤其是A30这个。有一批机器是工厂翻新的,用的是SXGA+的屏,呵呵,很爽的机器,价格也不错,市场上如果可以找到的话,应该是在7XXX左右,感觉性能上要强于T23很多。到底是16M的镭,和16M的S3 SAVEGE4比。就是好,呵呵,看看N600C和T23的对比就知道了。
再说A31系列的,如果不是带P的,或是明显指出是带有FLEXVIEW屏的机器,一般不推荐下手,有这个价格,不如上A30P了,呵呵,其实正常来说,P3M 1.2G的就已经完全够用了,P4的强项是在于多媒体编辑上面。
A31P。这款最后的王者之机,市场上根本不多见,偶尔有个一台两台,也被识货的买家抢收回家用。或是收藏了,呵呵。A机我研究的不深,不过A机是我最喜欢的机器。在我的眼里,出门就带X22。在家就用A30P。绝对完美搭配。:)
金无足赤,人无完人
再好的机器也会有点小错误的,A30 31这两个机器,唯一的问题就是显卡的问题,这个问题 帅哥他们在深度讨论区已经说过,我再这里就不多说了,只加个连接。
http://www.51nb.com/forum/viewthread.php?tid=44024&fpage=1
不过不管怎么说,在同期的机器中,A30P A31P就是王者,指环王 中有 王者归来:)在A系列中也有,那就是R50P这个机器,新的时代中的王者,不过因为从属于R系列,所以就不在此多讨论了
-----------------------------------------------
蝶舞。蜕变的精灵。R系列演化史
有人说:R=垃圾。你信吗,反正我是不信,一种东西。既然他可以存在,那么他就有存在的理由。
R系列的前身是IBM的I系列的,I系列是个很有意思的系列,他几乎把所有A T X的东西都仿制过一遍,米空前几天搞到的1124就是一个仿240Z的产品,在品质上没有问题,不过就是感觉很是好玩。
米空最早用的也是I SERIES的机器,一个仿T系列的机器,很好用。出手给同学以后他一直用到现在也没有出过任何问题,就是声音太小。呵呵,只能接上耳机听。
R系列最失败的产品就是R30 R31。这两个型号的机器。尤其是R30,用的ALI的主板,性能上可以说是同期的IBM产品中最差的。显存也是共享的,有用过早期共享显存的机器的朋友可以知道这个机器的性能到底是怎么样,这里就不多说了,因为这两个机器实在是性价比太低,不是我推荐的产品。
R32。
可以说是R系列上第一款可以推荐的产品。和T30差不多的配置,只在做工和用料上有差别,但是在性能上并不差太多。可以说是IBM经济实用型机器里最值得称到的机器了。我有几个朋友一直也用这个机器,除了散热不是特别好。到底是P4的机器,但是在其它方面,都没有太大的问题,偶尔也会有些小问题,但是从整体上来看,这个机器,对得起他的价格,也对得起最终用户,现在R32的市场价格一般是在6500到7000间,相比于T30。在性价比上稍微差了点点,但是在实际应用上,绝对不差,可以说,对于初入门的玩家来说,R32是个不错的选择。
R40 R40E。对于这两个产品,米空真的不好说什么,不知道IBM为什么在设计出了R32这样子的R系列的经典机以后想什么了,搞出这样子的两个机器,性价比极低。米空也只是用了几下,感觉不是很深,因为性价比太低了,不多说,也不推荐。
最后,也是米空最感兴趣的,就是A+R的结合。
这几天一直在把玩一台R50的机器,IBM从R50开始,就把A系列的称号转移到了台机上面。而以R系列来继承A系列的所有优点和机型,放弃了R40这种的机器。
对于我而言,我觉得R50就是A50,A系列,结实大气的做风完全继承到了R50上面。从商业角度上看,以一个成功机型的热销来带动其它不成功的机器的销售。这是商家常用的手段。R50的热销,也直接改变了用户对R系列的印象,尤其是对于新用户来说,他们可能不了解R系列前几款产品的优缺点,但是R50的成功,使得用户觉得,R系列不错,经济又实用。价格便宜量又足:)
王道的传承。R50P
呵呵,和A31P一样,王者之机,这机器的出现,也彻底的改变了用户对R系列的印象。因为他太强悍了。呵呵。可以说是现在可以败到的IBM机器中的NO.1了,虽然在CPU频率上和A31P还有些差别,但是要想到。这已经是两个时代的产品了,A31P的接力棒已经交到了R50P手中,以后的路,就靠R50P自己慢慢走好了
后记,所有的IBM本本。都可以说是设计师们心血的结晶。虽然在实际上,可能会有这样子那样子性能上的差别。但是对于每一个本本,我们都应该做到公正。公平的对待,认真找出他的优点和缺点。多写出自己的感受。只有这样子了,才会为新来都提供最准确的情报,最好的信息。 ”