簡體   English   中英

在我的Web應用程序項目上進行MSBuild期間無法掛接到CopyAllFilesToSingleFolderForMsdeployDependsOn

[英]Can not hook into CopyAllFilesToSingleFolderForMsdeployDependsOn during MSBuild on my Web Application project

我的主要目標是使用cmd將縮小的JS腳本添加到ASP.NET Web應用程序的部署包中。

此外,我的問題似乎要重復這個話題 ,甚至這個這個 ,它不是這樣的。 我的問題是我嘗試鈎住CopyAllFilesToSingleFolderForPackageDependsOnCopyAllFilesToSingleFolderForMsdeployDependsOn甚至PipelineCollectFilesPhaseDependsOn沒有運氣。 我在自定義Target使用了<Message Text="Inside of CustomCollectFiles" Importance="high"/>Sayed Ibrahim Hashimi 在他的答案msbuild.exe /v:diag開關中所msbuild.exe以驗證這一事實。 我不知道如何解決該問題:嘗試將經過上述修改后的相應XML代碼片段直接放入.csproj文件中,也放入單獨的.wpp.targets文件.wpp.targets ,該文件用於自定義打包。

我的開發環境包括VS2010和VS2013,我已經通過Web PI,Web部署工具,Windows Azure SDK安裝了Web Deployment 3.5。 我的系統PATH環境var包括c:\\Windows\\Microsoft.NET\\Framework64\\v4.0.30319\\;c:\\Program Files\\IIS\\Microsoft Web Deploy V3 ,以便能夠從cmd運行MSBuildMSDeploy 當我查看MSBuild日志時,我看到以下內容:

CopyAllFilesToSingleFolderForMsdeployDependsOn = 
  ;
  ;

CopyAllFilesToSingleFolderForPackageDependsOn = 
  ;

  ;
;

一些東西在這里

PipelineDeployPhaseDependsOn = 
  ;
  Package;

所以我的問題是從哪里找到包裝管道運行不正常的根源? 我錯過了什么其他診斷方法?

似乎MSBuild緩存的構建目標非常錯誤,但是Windows重新啟動后,各種鈎子(包括這篇文章中的鈎子) 終於解決了我的問題,開始按預期工作。

另外,對於所有正在執行自動構建工作的人員,可能會注意到與Web部署相關的工作可以從主{Project Name}.csproj文件移動到相應的{Project Name}.wpp.targets文件中,我認為這是有趣的。一種配置構建選項的更優雅的方法,尤其是當您不想將它們包含在TFS中或不想針對不同的發布目標自定義構建行為時。

因此,這是我現在可以使用的最終.wpp.targets文件:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
        <IgnoreDeployManagedRuntimeVersion>True</IgnoreDeployManagedRuntimeVersion>
        <ExcludeFilesFromDeployment>Web.config</ExcludeFilesFromDeployment>
        <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer>
        <AllowUntrustedCertificate>True</AllowUntrustedCertificate>
  </PropertyGroup>

  <Target Name="BeforeBuild">
    <Message Text="Building our Web Deploy package using Tools path $(VSToolsPath)" Importance="high"/>
  </Target>

<!--  More verbose way of doing the same as with BeforeTargets -->
<!--  <PropertyGroup>-->
<!--    <CopyAllFilesToSingleFolderForPackageDependsOn>-->
<!--      CollectJsMinFiles;-->
<!--      $(CopyAllFilesToSingleFolderForPackageDependsOn);-->
<!--    </CopyAllFilesToSingleFolderForPackageDependsOn>-->
<!--    <CopyAllFilesToSingleFolderForMsdeployDependsOn>-->
<!--      CollectJsMinFiles;-->
<!--      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);-->
<!--    </CopyAllFilesToSingleFolderForMsdeployDependsOn>-->
<!--  </PropertyGroup>-->
<!--  <Target Name="CollectJsMinFiles"> -->

  <Target Name="CollectJsMinFiles" BeforeTargets="CopyAllFilesToSingleFolderForPackage;CopyAllFilesToSingleFolderForMsdeploy">
    <Message Text="Collecting min JS files in CollectJsMinFiles" Importance="high"/>
    <ItemGroup>
      <JsMinFiles Include="**\*.min.js" />
      <FilesForPackagingFromProject  Include="%(JsMinFiles.Identity)">
        <DestinationRelativePath>%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
</Project>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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