aspnet_merge.exe”已退出,代码为1的错误的解决方法
生活随笔
收集整理的這篇文章主要介紹了
aspnet_merge.exe”已退出,代码为1的错误的解决方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
VS2005發布網站時不會像VS2003一樣生成規則的DLL文件、而生成的DLL文件名含有隨機數且不能一個項目生成一個DLL文件、讓人有一些遺憾、為了做到像vs2003一樣,微軟發布了WebDeployment Project插件可解決此問題:
下載地址
1、下載后安裝、右鍵選擇vs2005中的項目、會出現一個選項"Add Web Deployment Project"
2、選擇添加一個WebDeployment Project(輸入程序集名稱和發布地址)
3、此時解決方案中會多出一個項目
4、右鍵選擇該項目設置相應屬性
5、右鍵選擇該項目(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中的,重名問題沒有暴露出來,合并了就出問題了
下載地址
1、下載后安裝、右鍵選擇vs2005中的項目、會出現一個選項"Add Web Deployment Project"
2、選擇添加一個WebDeployment Project(輸入程序集名稱和發布地址)
3、此時解決方案中會多出一個項目
4、右鍵選擇該項目設置相應屬性
5、右鍵選擇該項目(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中的,重名問題沒有暴露出來,合并了就出問題了
轉載于:https://blog.51cto.com/zhangleiy/363709
總結
以上是生活随笔為你收集整理的aspnet_merge.exe”已退出,代码为1的错误的解决方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Ubuntu下gedit中文乱码
- 下一篇: XML 数据 BCP方式大批量的上传--