簡體   English   中英

在沒有Web部署項目的VS中預編譯Web應用程序項目?

[英]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應用程序的影響。

因此,這是我當前的解決方案,遠非理想。

  1. 我創建了一鍵發布配置文件,將應用程序發布到計算機上的本地文件夾中。 該站點的本地副本可以用作Aspnet_compiler的輸入,該文件將進行預編譯。

  2. 我創建了一個名為“ Precompile”的新構建配置。

  3. 在項目文件中,我創建了一個新的“目標”,該目標僅在預編譯配置處於活動狀態時運行(有關語法,請參見下文)。 這基本上告訴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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM