发布网站遇到的问题

VS05发布网站遇到的几个问题

项目做完需要把整个项目传到空间中。由于VS05改变了以往03的发布“习惯”。本人在实践中也遇到了不少问题,先把问题分析出来供以后学习参考。

我想发布网站最需要注意的地方就是生成DLL文件了,并且要像VS03中那样方便以后维护。VS05生成DLL有三种方法;

一、使用VS自带的“发布网站”功能。

第一步: 

 
第二步:


剩下的就是把这些文件全部传到空间中即可。这里需要注意的是发布网站的时候需要把项目中的数据库停用,这样才可以发布。使用这种方法在以后维护网站的时候不是非常方便。系统会在BIN文件夹下随机生成很多DLL文件,如果用过VS03的朋友就会知道,以后维护起来非常费事。那就接着往下看吧,另一种发布的方法。

二、利用微软出的插件WebDeployment生成单一程序集(一个DLL文件)

没有插件的朋友自己到网上找吧,这里就不提供下载地址了。在装好插件之后VS05菜单的生成中会多了一个选项Add Web Deployment Projiect或者直接在项目中鼠标点击右键也会看到 如下面两幅图 
 


                                   

第一步:点击Add Web Deployment Project选项出现如图所示 

 

Name是生成程序集(DLL文件)的名称;Location是发布位置(这里要注意目录不能选择当前项目目录),选好之后点击OK,这时您的项目中就会多了一个以刚才Name命名的解决方案jinwb,如图: 

 

第二步:鼠标右击该解决方案,选择【属性页】 弹出如图选项 

 

找到OutPut Assemblies 选项卡;选择Merge all outputs to a single assembly 并勾选下面的 Treat as library component(remove the App_Code.compiled file)   或者选择Merge all pages and control outputs to a single assembly 为程序集起好名,其他不做修改,点击确定

Output Assemblies中的四大选项:
1. Merge all outputs to a single assembly-所有输出都编译成一个程序集(参数:程序集名称)
 1.1    Treat as library component (remove the App_Code.compiled file)-App_Code视为类库(删除App_Code.compiled文件)

2. Merge each individual folder output to its own assembly-WEB项目中单独的目录会编译到一个程序集中(参数:程序集前缀)

3. Merge all pages and control outputs to a single assembly-所有页面控件编译到一个程序集中(参数:程序集名称)

4.  Create a separate assembly for each page and control output-为每一个页面和控件创建程序集Signing使用 key文件建立强命名空间的程序集

第三步:点击新增项目的生成。如图: 

 

余下的工作就是等待系统生成了。

  注意:如发布报出"aspnet_merge.exe”已退出,代码为1的错误

  解决方法:

1.将VS 2005的工具-选项-项目和解决方案-生成并运行,设置“MSBuild 项目生成输出详细信息”,选择“详细”。再次生成Web Deployment Projects项目

2.Microsoft Visual Studio 2005——>视图——>输出,“输出”框内的信息就变得非常丰富了;

3.Web Deployment 重新发布

这样就可以查看哪里出错了;

果然,再次发布,错误显示:

An error occurred when merging assemblies: ILMerge.Merge: ERROR!!: Duplicate type ‘web_left’ found in assembly 'App_Web_k7ytr'

它的意思是说web_left的类,已经存在了,我去项目里搜索这个字符串,果然,出现了四次;两次是在cs文件中的class定义处,另两处自然是页面的inherits调用处;

不用说,这是某个程序员在复制页面时,没有做任何改动,连cs引用也没有改;马上改了,再次生成;

又停了下来,提示与前面一样,只是类名不同罢了,看来同样的错误有很多,再改,然后再生成,根据提示,找到错误处,再改;生成是好慢的,最终,生成成功!呵呵;所有的cs生成的dll合成了一个dll;

在页面的头部,cs引用处,变成了
<%@ page language="C#" autoeventwireup="true" inherits="web_GovOpen_Article, BuilderWeb" enableEventValidation="false" viewStateEncryptionMode="Never" %>
注意,inherits处,引用的dll名称,不再带有随机数了;

再说些其它的,在VS2005的“输出”窗口中,还看了这样的信息
命令:
         C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_compiler.exe -v /webSite -p "D:/项目二期/webSite" -u -f -d "D:/项目二期/BuilderWeb/webRoot//"
         任务“AspNetCompiler”正在使用“C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/aspnet_compiler.exe”中的“aspnet_compiler.exe”。

挺熟悉的,原来它是用aspnet_compiler.exe来生成的,当初自己还用它的命令行形式自己搞过呢;

再看后面
Running aspnet_merge.exe ...
         命令:
         C:/Program Files/MSBuild/Microsoft/WebDeployment/v8.0/aspnet_merge.exe "D:/项目二期/BuilderWeb/webRoot" -o BuilderWeb -debug -copyattrs
         任务“AspNetMerge”正在使用“C:/Program Files/MSBuild/Microsoft/WebDeployment/v8.0/aspnet_merge.exe”中的“aspnet_merge.exe”。

不用问,aspnet_merge.exe的功能是合并dll文件了;

正是因为aspx引用的cs文档中的类重名,所以在合并时才会报错,以前是分开在不同的dll中的,重名问题没有暴露出来,合并了就出问题了;

现在明白这个“代码为1的错误”

生成好之后你会在先前选择发布位置中看到含有自己命名的程序集(一个DLL文件)的项目。其中的CS文件已经没有了。这时你可以吧这些文件传到空间中了。像VS03一样,以后维护网站的时候重复上述步骤,只传递DLL文件即可。(注意一下:生成网站的时候如果项目中存在数据库的话,要停止数据库服务才能发布成功)

接下来说说用这种方法遇到的几个问题;

再发布网站之后我想在本机进行测试一下,我先删除了生成之前的项目。然后把生成后的文件拖到了删除之后项目的文件夹,打开VS05 提示如图: 

 

这里点击“是”就行了,原因是你所打开的项目已经编译过了。设置好起始页之后F5运行提示:已预编译此应用程序,解决方法是把文件中的 PrecompiledApp.config删除即可。再次运行又出现错误。提示错Cannot find any assemblies that can be merged in the application bin folder. 解决方法是删除发布网站时候生成的项目即可解决

三、升级VS05到SP1 新建项目中会有Web Application Project 这种是微软后增加的网站开发模式。与Web Site Project不同,这种模式也可以生成单一程序集。这里就不在说明了。大家可以试一下。不过具网上有人说这种模式不是非常好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值