![](/img/trans.png)
[英]How to use command line msbuild to deploy VS2012 Web Site project without precompiling it?
[英]Precompiling Web Application Project in VS WITHOUT Web Deployment Project?
我想在Visual Studio 2010中預編譯我的整個ASP.NET Web應用程序項目,主要是為了確保頁面和控件中沒有錯誤。
不使用Web部署項目怎么辦? 我嘗試使用WDP,但是它有一個令人討厭的錯誤,導致它編譯應用程序文件夾中的所有文件,包括已被“排除”的文件。 這太瘋狂了。
明確地說,我了解如何在VS中編譯我的應用程序。 我也知道如何部署它。 我在這里想知道的是在部署之前如何預編譯整個應用程序(包括所有ASPX和ASCX文件)。 這對我很重要,因為這是確保運行時之前ASPX或ASCX文件中沒有錯誤的唯一方法。 我了解有為此使用的命令行工具。 但是,我想在VS中進行預編譯,以便可以快速糾正發現的任何問題。
那么還有另一種方法嗎? 有一些自定義發布命令的方法嗎?
非常感謝您的幫助,因為與此主題相關的MS文檔令人沮喪,重復且冗長。
布賴恩
這個問題問了多年,但有些人可能會覺得有用。 我正在使用VS 2013,但以前也在VS 2010中使用了此功能。
Go to Tool/External Tools, Add button.
Title: Pre Compile
Command: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe
Arguments: -p $(SolutionDir)\Web -v /
Initial directory: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\
[TICK] : Use Output Window
顯然,將路徑更改為合適的.net框架。 您可以單擊錯誤,然后在VS中的正確行上打開文件。 奇怪的是,有時我會多次運行它並獲得不同的輸出...
缺點是它不會告訴您完成的時間(您始終可以在任務瀏覽器中檢查aspnet_compiler!)。 因此,我完成了一個DOS批處理文件,其唯一目的是在“輸出”窗口中說“完成”。 請注意,命令行與上述命令行不同,因為在此版本中,我已經復制了由我們自己的msbuild腳本有效生成的命令行(例如,它使用“ fixednames”來解決循環引用預編譯器錯誤)。 %〜f1是VS的“外部工具”窗口的“參數”輸入框。
批處理文件(precompile.cmd):
@echo C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -p "%~f1" -v / -f -c -fixednames c:\temp\SomeFolder
@c:
@cd C:\Windows\Microsoft.NET\Framework\v4.0.30319\
@C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -p "%~f1" -v / -f -c -fixednames c:\temp\SomeFolder
@echo.
@echo Done.
在VS中:
Go to Tool/External Tools, Add button.
Title: Pre Compile 2
Command: C:\mypath\precompile.cmd
Arguments: $(SolutionDir)\Web
Initial directory: [leave blank]
[TICK] : Use Output Window
PS:不確定如何/是否受到網站或Web應用程序的影響。
因此,這是我當前的解決方案,遠非理想。
我創建了一鍵發布配置文件,將應用程序發布到計算機上的本地文件夾中。 該站點的本地副本可以用作Aspnet_compiler的輸入,該文件將進行預編譯。
我創建了一個名為“ Precompile”的新構建配置。
在項目文件中,我創建了一個新的“目標”,該目標僅在預編譯配置處於活動狀態時運行(有關語法,請參見下文)。 這基本上告訴MSBuild在編譯后運行額外的任務。 也就是說,它將運行Aspnet_compiler來預編譯站點。 它采用一鍵式生成的站點文件,對其進行預編譯,然后將其輸出到第二個本地文件夾。 如果在預編譯期間發現任何錯誤,它們將顯示在VS中。
這是一個半生不熟的故障解決方案。 最大的是,Aspnet_compiler發現的任何錯誤都指向“一鍵式”文件夾中的文件,因此,如果雙擊它們,它們會將您帶到這些文件,而不是解決方案文件。
我可以用這種方法控制預編譯,這很好。 除非選擇“預編譯”配置,否則該任務不會運行。 但是整個事情感覺很round回。
也許會出現一個更好的解決方案。
這是我最后添加到項目文件中的主<Project>
元素內部的元素:
<Target Name="AfterCompile"
Condition=" '$(Configuration)|$(Platform)' == 'Precompile|AnyCPU' ">
<AspNetCompiler PhysicalPath="[Source files created by One-click]"
VirtualPath="/" Force="true"
TargetPath="[Destination folder]" />
</Target>
構建解決方案。 確保該Web應用程序未從構建中排除,而是簽入解決方案屬性頁。
不記得“在構建解決方案時排除網站”是針對Web應用程序項目/網站項目還是兩者都適用。
由於無法在評論中附加圖片,因此我必須發布另一個答案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.