繁体   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