Web Deployment Project 如何自訂 AfterBuild 目標(VS2008)

分享到噗浪!

在我上次介紹 Web Deployment Projects 的文章中有提到你可以自行修改 Web Deployment Project ( WDP ) 的專案檔( *.wdproj ) 的內容,因為此專案檔實際上是透過 MSBuild 編譯執行的,你可以自行擴充 BeforeBuild, BeforeMerge, AfterMerge, 或 AfterBuild 目標,不過當 WDP for VS2005 升級到 WDP for VS2008 時有做出一些調整,會導致有些自訂動作怎麼寫都不成功。

雖然在 Using Web Deployment Projects with Visual Studio 2005 文件解說的很詳盡,不過最重要的是原本的 $(TargetDir) 屬性已經改名了,在文件中原本的例子如下:

MSBuild AfterBuild Target

附帶一提:這例子也有錯誤的地方,也就是 $(TargetDir) 其實本身就包括了「反斜線」結尾,正確的寫法應該是:

<Target Name="AfterBuild">
  <MakeDir Directories="$(TargetDir)Upload" />
</Target>

但當使用 Visual Studio® 2008 Web Deployment Projects 時,該屬性應該改成 $(WDTargetDir) 才對,如果你使用 $(TargetDir) 的話,會得到空字串,以致於會將目錄建立在專案輸出目錄所在磁碟的根目錄下。

如果你使用 Web Application 專案開發網站,通常會在 WDP 輸出專案後一併刪除專案檔刪除一些額外的目錄,範例如下:

<Target Name="AfterBuild">
  <!-- 在 Release 建置時,直接刪除 obj 目錄 -->
  <RemoveDir Directories="$(WDTargetDir)obj" 
             Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' " /> <!-- 刪除專案檔 --> <Delete Files="$(WDTargetDir)WebApplication1.csproj" /> <!-- 刪除專案使用者定義檔 --> <Delete Files="$(WDTargetDir)WebApplication1.csproj.user" /> </Target>

在使用 RemoveDir 或 Delete 工作 (Task) 時,不能使用萬用字元(wildcard),所以需刪除的檔案必須一一個別定義才行。

相關連結

  

此文章由 will 發表於 2009/3/15 下午 08:41:28

永久連結 | 評論 (2) | 此文章的RSSRSS comment feed |

分類: Visual Studio | ASP.NET

標籤: , ,

評論

三月 16. 2009 14:13

tomexou

我用最新的WDP,在編譯時想把某些目錄Exclude掉以加快build速度
但似乎都不能成功
翻遍了文章也找不到solution,will有試過嗎?

tomexou 台灣

三月 16. 2009 14:42

will

專案 Build 的速度應該不是控管在 WDP 吧?WDP 好像只有幫你做 Merge 的動作,真正來源專案的建置應該是從你原本的專案檔建置的。

如果你要排除來源的檔案,你試過這個設定嗎?

  <ItemGroup>
    <ExcludeFromBuild Include="$(SourceWebPhysicalPath)\Test\**\*.*"/>
  </ItemGroup>

will 台灣

新增評論


( 您輸入的Email不會顯示於網站上 )

  Country flag

biuquote
  • 評論
  • 線上預覽
Loading