ASP.NET Web站点遇到的尴尬事

工作中最常做的事情就是,把前人写好的代码拿过来添加点功能或者优化下之前的BUG。一般小网络公司的代码完全没有规律可循,基本上都是从之前的公司那里扒过来的或者网上找到的代码,自己也不懂其中的原理,拿过来只是改改就能使用。这类代码毫无章节可言,看得人一头雾水。虽说之前待过一家软件公司,其框架是自主开发,尽管很差劲,尤其是执行效率,但是使用起来比较容易,封装好的东西大多不用去操心其是如何实现的。毕竟提高了工作效率。

今天在为公司发布项目的时候遇到了一个之前也遇到过很多次的问题,尽管之前也想解决,可是不知其原理,问过几个同事最终也是无解,或者答非所问。

首先描述一下问题:

之前别人做过的网站,由于某些原因需要对其进行反编译。可是其DLL文件一般都为App_Web_0r2er2lm.dll,App_Web_ugrjoh1o.dll。让人一头雾水,开始经验不足的时候还以为此类编译文件属于开发过程中程序员对其进行了特殊的加密,结果Google查找了半天也没查找到ASP.NET程序是通过何种手段进行这样的加密的。今天遇到同样的问题让人很是头疼,不过此次不需要进行反编译了,而是有其源代码。发现直接通过Visual Studio 2008 “发布网站”,居然生成的DLL文件也是加密的。而且每次发布生成的DLL文件名称也是不同的,这给网站部署在服务器上带来了很大不便,毕竟只是改了一个页面的代码,就需要对整个站点的所有相关aspx和web对应DLL文件进行全部替换(因为生成后页面的引用会变更)。这样感觉太麻烦了。刚好时间比较充裕,运气好看到一篇题为:“ASP.NET发布网站解决方案”的文章,结果茅塞顿开。

原来这是微软机制的问题,并非所谓的小心眼程序员的恶作剧。

先看看上图2个Web站点有什么区别?

上边的是通过:“文件”—“新建”—“网站”所创建的。即ASP.NET 网站

生成的项目DDL为:

发布时最好选中如下图两个选项:”允许更新此语编译站点”,”使用固定命名和单页程序集”。

选择这2项的好处在于。

选择第一项可以对发布好的程序aspx页面进行修改,不需要在进行程序发布。

选择第二项可以节省项目服务器上更新项目的成本,毕竟修改了一个cs文件,没必要把整个站点都重新上传一边。(这点尤其重要,今天我可是在这上面吃了很大的亏,花费了不少时间和精力), 生成的DLL虽然都是随机分配的,不过以后生成都会是该分配字符,方便以后的维护。

如果想把网站生成跟应用程序一样需要使用:Web Deployment,写该文时微软官方提供只有20082010两个版本。如何使用请参照“ASP.NET发布网站解决方案”这里我就不再累赘的贴出了。

唯一要记住的就是“Add Web Deployment Project”的“Name”属性就是我们要生成的DLL文件名(程序集名称)。

下边的是通过:“文件”—“新建”—“项目”—“ASP.NET Web 应用程序”所创建。即ASP.NET Web 应用程序

生成的项目DDL为:

网上给Asp.Net Web应用程序,Asp.Net网站做出了详细的说明,如下是我整理的差异说明:

Asp.Net网站:

项目定义:管理基于文件系统,一个文件夹就是一个站点项目,其中内部所有文件都是站点的一部分,所以说这种方式更加灵活,快速。

编译和生成:每个页面或者用户空间都可以编译成单独的程序集(貌似这样给反编译带来了很大的困难)。

调试开发:可以在配置项中选择编译整个站点或者指定某个页面。当然完全编译整个站点是非常耗时的工作。所以我们在调试的时候最好是指定某个页面。让编译器忽略其他页面。

部署:把每个页面及其对应的代码隐藏文件编译成单独的程序集,但是程序集过多会增加服务器内存的消耗。

生成的程序集:生成随机的程序集名,需要通过插件Web Deployment Projects才可以生成单一程序集。

优点:

动态编译该页面,马上可以看到效果,不用编译整个站点(主要优势)

可以使错误的部分和使用的部分不相干扰(可以要求只有编译通过才能签入)

可以每个页面生成一个程序集(不会采用这种方式)

可以把一个目录当做一个Web应用来处理,直接复制文件就可以发布,不需要项目文件(无所谓,只适合小站点)

可以把页面也编译到程序集中(应该用不到,而且Asp.Net Web应用程序也可以通过Web Deployment插件来实现)

Asp.Net Web应用程序:

项目定义:与Windows Form兼容,都采用项目的形式通过项目文件进行管理,只有在该文件中引用的文件才会在解决方案资源管理器中出现并且编译。

编译和生成:所有的代码隐藏文件和独立的类文件都编译成一个单独的程序集。

调试开发:调试web页面时,完全编译整个项目。然而由于Visual Studio增加了增量编译模式,只有修改过的才被编译,所以速度快。

部署:所有类文件都会编译成单独的程序集,所以只需要将该程序集和页面,静态内容一起部署就行了,服务器会在用户访问时对页面进行动态编译。“

优点:

网站编译速度快,使用了增量编译模式,仅仅只有文件被修改后,这部分才会被增量编译进去。

生成的程序集:可以指定网站项目生成单一程序集,因为是独立的程序集,所以和其他项目一样可以指定应用程序集的名字、版本、输出位置等信息

可以将网站拆分成多个项目以方便管理

可以从项目中和源代码管理中排除一个文件

支持VSTS的Team Build方便每日构建

更强大的代码检查功能,并且检查策略受源代码控制

可以对编译前后进行自己规定的处理

对App_GlobalResources 的Resource强类支持

直接升级使用VS2003构建的大型系统

通俗易懂,一眼看上去就能看出差别来。反正网上给的区别解释,看得本人是挺头大的。

最靠谱的解释如何下:

Asp.Net网站发布的时候在bin目录下面会生成很多类似App_Web_0r2er2lm.dll,App_Web_ugrjoh1o.dll的文件。每次修改页面类文件不需要进行编译,直接把网页打开即可看到效果(类似于一般我们修改aspx页面的时候,修改过后不用重新编译程序,直接刷新浏览器就可以看到更改后的效果)。唯一的缺点就是,F5调试的时候要等待很长时间的编译过程,这个过程要比Asp.Net Web应用程序长几倍。调试的等待时间会让人痛苦无比。
Asp.Net Web应用程序 发布的时候bin目录下面就一个dll文件 ,如:ReleasedExampleApp.dll。每次修改页面类文件的时候都要重新编译。但是速度快,F5调试的时候等待时间短。

电脑维修网

原文地址:https://www.cnblogs.com/frlmoney/p/3084020.html