aspnet_merge.exe”已退出,代碼爲1的錯誤的解決方法有一點很重要``那就是詳細的輸出信息只能在輸出欄中查看``而不是錯誤信息欄
VS2005發佈網站時不會像VS2003一樣生成規則的DLL文件、而生成的DLL文件名含有隨機數且不能一個項目生成一個DLL文件。
所以,每次網站改動了,一發布,就要全站上傳,很不習慣,很不爽;
爲了做到像vs2003一樣,聽說微軟發佈了WebDeployment Project插件可解決此問題,就搞了一個;安裝很簡單。
但是發佈時老是報出
"aspnet_merge.exe”已退出,代碼爲1的錯誤
而且發佈的DLL並沒有合成一個,還是像以前一樣,一大堆;
去網上查了一下,有的說是中文編碼問題,有的說是數組索引超出限制等;沒辦法啊,自己解決吧,但是這錯誤從哪裏找起啊;
還好,看網上有人說,將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中的,重名問題沒有暴露出來,合併了就出問題了;
現在可以明白這個“代碼爲1的錯誤”了吧。