VS2005發佈網站時不會像VS2003同樣生成規則的DLL文件、而生成的DLL文件名含有隨機數且不能一個項目生成一個DLL文件、讓人有一些遺憾、爲了作到像vs2003同樣,微軟發佈了WebDeployment Project插件可解決此問題:
下載地址
1、下載後安裝、右鍵選擇vs2005中的項目、會出現一個選項"Add Web Deployment Project"
二、選擇添加一個WebDeployment Project(輸入程序集名稱和發佈地址)
三、此時解決方案中會多出一個項目
四、右鍵選擇該項目設置相應屬性
五、右鍵選擇該項目(DataBind2005)選擇「生成」、此時會發佈網站到指定的目錄、生成DLL文件同vs2003同樣、更新時只需
上傳DLL文件
說明:還有一種方法,vs2005裝SP1後新建項目裏面會出現「ASP.NET Web應用程序」,用這個作網站生成的DLL文件就同vs2003同樣。可是若是你以前的網站是用vs2005的網站上新建的,那用這種方式可能要修改必定的代碼。
解決方法:實際上在咱們的一個實際ASP.NET 2.0的解決方案中來應用這種方式出現了問題,下面我就講一下個人解決過程但願對你們有所幫助。
咱們的解決方案包括22個項目(主要是類庫),其中的一個WEB項目是負責用戶UI的,傳統的生成或是發佈網站的方式沒有任何問題,當使用Web Deployment Projects工具生成惟一程序集時出現了錯誤信息「Aspnet_merge.exe Exited with Code 1」(Aspnet_merge.exe 退出,錯誤代碼1),這樣的信息根本沒法讓咱們辦斷究竟是哪裏出了問題。好,下面依次打開VS 2005的工具-選項-項目和解決方案-生成並運行,設置「MSBuild 項目生成輸出詳細信息」,選擇「詳細」。再次生成Web Deployment Projects項目,注意「輸出」框內的信息如今變得很是豐富了,最後致使沒法編譯的問題終於出來了「An error occurred when merging assemblies: ILMerge.Merge: ERROR!!: Duplicate type ‘_Default’ found in assembly 'App_Web_k5hhsnh0'」,它的意思是說在程序集中發現了相同的類型_Default,
通過我檢查確實在咱們的WEB項目中存在了兩個_Default類(在不一樣的目錄中或者是ascx和aspx的同名文件),這樣的問題經過通常的生成完成和發佈網站確定都是檢測不出來的,運行也是正常的。VS 2005的WEB項目默認的把命名空間給去掉了,能夠手動增長一個命名空間,
cs代碼中加入namespace的語句塊,另外別忘了在aspx文件的<@page>的Inherits中寫入對應的[namespace].[類名];通過這樣的操做再次編譯成一個程序集就沒有問題了
(備註:這個項目先後一共發現了5對類名稱一致的狀況,加上命名空間或是更名稱就能夠解決了)。
將VS 2005的工具-選項-項目和解決方案-生成並運行,設置「MSBuild 項目生成輸出詳細信息」,選擇「詳細」。再次生成Web Deployment Projects項目,「輸出」框內的信息就變得很是豐富了;這樣就能夠查看哪裏出錯了;
果真,再次發佈,錯誤停在了
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中的,重名問題沒有暴露出來,合併了就出問題了