文件发布到文件系统后运行 Target

2023-11-29

我正在尝试创建发布配置文件,它将所有已发布的文件复制到各个文件夹。不幸的是我读到不可能直接通过publishUrl建议发布到一个文件夹并从中复制所有文件。我设法编写了复制目标功能,但目标运行的顺序是错误的。 我尝试通过“构建”>“发布 Web”直接从 VisualStudio 2015 运行发布。

这是我的发布个人资料:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Debug</LastUsedBuildConfiguration>
    <LastUsedPlatform>Any CPU</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <LaunchSiteAfterPublish>False</LaunchSiteAfterPublish>
    <ExcludeApp_Data>True</ExcludeApp_Data>
    <publishUrl>obj\Package\PackageTemp</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <ExcludeFilesFromDeployment>Web.config;package.json;packages.config;Typescript\**;DynamicCss\**;gulpfile.js;</ExcludeFilesFromDeployment>
  </PropertyGroup>
  <Import Project="AdditionalResources.targets" />
  <PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>AdditionalResources</CopyAllFilesToSingleFolderForPackageDependsOn>
  </PropertyGroup>
  <ItemGroup>
    <DestLocations Include="D:\PUBLISH_TEST\" />
    <DestLocations Include="D:\PUBLISH_TEST2\" />
  </ItemGroup>
  <Target Name="CopyToDeployFolders" AfterTargets="CopyAllFilesToSingleFolderForPackage" Outputs="%(DestLocations.Identity)">
    <ItemGroup>
      <PublishedFiles Include="obj\Package\PackageTemp\**\*" />
    </ItemGroup>
    <Message Importance="high" Text="FilesToCopy: @(PublishedFiles)" />
    <PropertyGroup>
      <_DeployPathIdentity>%(DestLocations.Identity)</_DeployPathIdentity>
    </PropertyGroup>
    <Copy SourceFiles="@(PublishedFiles)" DestinationFiles="@(PublishedFiles->'$(_DeployPathIdentity)%(RecursiveDir)%(Filename)%(Extension)')" />
  </Target>
</Project>

其运行顺序如下:

Build
AdditionalResources
CopyToDeployFolders
Publish folder

这是有问题的,因为我的临时文件夹尚未创建/发布。我尝试使我的 CopyToDeployFolders 目标覆盖 AfterPublish 并尝试使用各种不同的 AfterTargets,但它们都不起作用 - 有时我的目标未执行或仍在发布文件夹之前运行。

我试图通过查看来找出正在运行的目标 c:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets 正如这个答案所示为什么 MSBuild 忽略我的 BeforePublish 目标?,但是没有找到正确的,尝试将AfterTarget改成不同的,结果还是一样。

编辑: 具有诊断级别的输出:

2>    Target "GatherAllFilesToPublish" in file "C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\Web\Microsoft.Web.Publishing.targets" from project "C:\MyProject\MySite\MySite.csproj" (entry point):
2>        Done building target "GatherAllFilesToPublish" in project "MySite.csproj".
2>Done building project "MySite.csproj".
2>Deleting existing files...
2>Publishing folder /...
... files being published ...
2>Web App was published successfully file:///C:/MyProject/MySite/MySite/obj/Package/PackageTemp
2>

编辑2: 添加了AdditionalResources.targets的内容

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Target Name="AdditionalResources">
    <ItemGroup>
      <AddFiles Include="$(ProjectDir)\App_Themes\**\Basic\Dynamic.css">
        <CustomPath>App_themes\</CustomPath>
      </AddFiles>
      <AddFiles Include="C:\y\SharedDLL\Clients\Web\bin\**\*.dll">
        <CustomPath>bin\</CustomPath>
      </AddFiles>
      <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\**\ctrl_res\**\*.*" />
      <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\js\**\*.*">
        <CustomPath>js\</CustomPath>
      </AddFiles>
      <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\**\ClientBin\**\*.xap" />
      <AddFiles Include="C:\y\SharedDLL\Clients\Web\resources\FileUpload\**\*.js">
        <CustomPath>js\</CustomPath>
      </AddFiles>
      <!-- Minified files should be copied last to override non-minified ones -->
      <AddFiles Include="$(ProjectDir)\MINIFIED_FILES\**\*.*" />
    </ItemGroup>
    <ItemGroup>
      <FilesForPackagingFromProject Include="%(AddFiles.Identity)">
        <DestinationRelativePath>%(AddFiles.CustomPath)%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>
</Project>

我尝试使我的 CopyToDeployFolders Target 覆盖 AfterPublish 并尝试使用各种不同的 AfterTargets,但它们都不起作用

测试项目文件后,将 msbuild 详细程度设置为详细信息。我得到了和你一样的结果。然后我发现自定义目标CopyToDeployFolders将文件复制到后执行obj\Release\Package\PackageTmp 但在发布文件夹之前。就像您收到的订单一样。

Build
AdditionalResources
CopyToDeployFolders
Publish folder

经过进一步调查,我找到了官方的回复:

“我们目前不支持从文件系统协议的 VS 发布后执行自定义目标。但是,如果您从命令行发布,则目标将被执行。”

此外,正如我们在输出窗口中看到的那样,自定义目标CopyToDeployFolders被处决复制文件后 to obj\Release\Package\PackageTmp。作为解决方法,您可以复制文件夹“中的所有文件”obj\Release\Package\PackageTmp“而不是发布文件夹”obj\Package\PackageTemp”,那么问题就解决了。

所以只需要改变<PublishedFiles Include="obj\Package\PackageTemp\**\*" /> to:

<ItemGroup>
  <PublishedFiles Include="obj\Debug\Package\PackageTmp\**\*" />
</ItemGroup>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

文件发布到文件系统后运行 Target 的相关文章

随机推荐

  • 如何在jsPDF生成的PDF中添加水印?

    我正在从canva 生成PDF 并使用jsPDF 生成它 https github com MrRio jsPDF 这是我正在使用的代码 我想将水印添加到页面中 有人能帮我吗 self downloadCanvasObjectAsPDF f
  • 导入错误:没有名为 requests 的模块

    我知道有很多关于此的帖子 并且我尝试使用提供的解决方案 但无济于事 我试过pip install requests and pip install requests upgrade pip install requests upgrade
  • 没有标签的“for”属性的自定义复选框(Bootstrap 4)

    有没有办法仍然保留 Bootstrap 4 自定义复选框样式不使用 the id关于输入和属性for标签上 当您删除它时 检查的样式不存在 Example div class custom control custom checkbox m
  • 使用 jQuery 以像素为单位的填充或边距值作为整数

    jQuery 具有 height 和 width 函数 它们以整数形式返回像素的高度或宽度 如何获取元素的填充或边距值以像素和整数为单位使用 jQuery 我的第一个想法是执行以下操作 var padding parseInt jQuery
  • 需要帮助将格式 20120130 的日期转换为日期数据类型 oracle sql

    您能帮我将日期从 20120101 格式转换为 Orcle Sql 中的 DATE 格式吗 我看了这个link但它没有提到日期格式是否是自定义的 编辑 是否可以将任何排除规则写入转换函数 像这样的 99999999 到 9999 12 31
  • Firefox 浏览器不会重新加载更新的 CSS/JS 文件

    我在 Firefox 浏览器中遇到问题 因为每次更新 CSS 或 JS 文件时 我都需要清除 Firefox 浏览器的缓存才能获取更新的文件 我使用 XSP2 服务器是因为我在 ubuntu 中使用 C 和 asp net 开发了我的 we
  • Java真的很慢吗?

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 Java有在某种程度上因缓慢而闻名 Java真的很慢吗 如果是 为什么 瓶颈在 或曾经 在哪里 是因为 JVM 效率低下吗 垃圾收
  • array_unique() 是否通过引用修改其数组?

    我使用后array unique 在数组上 当我var dump 数组 它仍然具有相同的内容 但有重复 array 21 0 gt string 10 tricou CRS 1 gt string 10 tricou CRM 2 gt st
  • C 调用约定和传递参数

    在 Linux 或 OS X 中进行函数调用时 被调用者可以修改堆栈上参数的值吗 我的假设是 由于调用者是清理它们的人 因此它们在函数调用后应该包含相同的值 但是我发现带有 O2 的 GCC 正在修改在堆栈上传递给它的参数 我还查找了包括
  • 为什么 openCV 的 fastNlMeansDenoisingColored() 给出错误?

    我是菜鸟openCV概念 所以如果我的问题很愚蠢 请原谅我 实际上我正在尝试应用Photo fastNlMeansDenoisingColored 方法 但我不明白为什么它会给出这样的错误 Code Mat tmp new Mat bitm
  • 将 R 中的参数传递给多个实数变量的函数

    我是 R 的新手 需要解决多目标优化问题 MOOP 我已经导入了 mco 包 定义了我的函数并检查了 nsga2 函数 问题是 当前者与数字变量匹配时 我还没有找到绑定函数定义中的参数 形式参数 和调用中的参数 实际参数 的正确方法 我有以
  • xampp 上的 LDAP 配置

    我一直在尝试在 xampp localhost 上配置 ldap 我在 php ini 文件中启用了 ldap 扩展 我也尝试过更改系统变量 我不断收到此错误 LDAP 功能不存在 加载模块 ldap php 模块或使用编译有 ldap 支
  • UITabBarController 仅显示其 UITabBar 的一半(屏幕外)

    当我从 UIViewController 呈现 UITabBarController 后 我的 UITabBar 没有完全显示 请你告诉我我做错了什么吗 我的代码是 some method LoggedInViewController lv
  • R:熔化和铸造

    我有一个这样的数据集 CASE ID c C1 C1 C2 C2 C2 C3 C4 PERSON ID c 1 0 7 8 1 20 7 PERSON DIVISION c Zone 1 NA Zone 1 Zone 3 Zone 1 Zo
  • if($variable) 究竟是如何工作的? [复制]

    这个问题在这里已经有答案了 可能的重复 关于PHP中的if语句 在 PHP 脚本中 像这样的 if 语句检查什么 我已经多次看到它在脚本中使用 现在我真的很想知道它 寻找 什么 它没有缺少任何东西 它只是 if 语句中的一个普通变量 我在任
  • 在asp.net中显示按月和年分组的记录

    我需要按我的 asp net 页面上显示的日期 月和年 对记录进行排序 任何想法 建议都会有帮助 这是我目前拥有的代码 table width 40 border 0 style margin left auto margin right
  • 使用 pandas 转换 Excel 样式日期

    我必须解析一个 xml 文件 该文件为我提供 Excel 样式的日期时间 例如 42580 3333333333 Pandas 是否提供了一种将该数字转换为常规数字的方法datetime object 好吧 我认为最简单的事情就是构建一个T
  • 如何修复空指针异常

    我一直在尝试修复这个空指针异常 但我不能 我知道它指向一个空对象 但我不知道如何修复它 我是 Java 编程的初学者 所以如果这是一个愚蠢的问题 请不要生气 这是我的代码 import android app Activity import
  • 是漂亮计数器惯用语的错误还是格式不正确的静态订单惨败?

    以下代码在 clang 中崩溃 x86 64 pc linux gnu 上的版本 5 0 0 3 16 04 1 但在 gcc 9 2 0 中运行良好 struct Registry static int registerType int
  • 文件发布到文件系统后运行 Target

    我正在尝试创建发布配置文件 它将所有已发布的文件复制到各个文件夹 不幸的是我读到不可能直接通过publishUrl建议发布到一个文件夹并从中复制所有文件 我设法编写了复制目标功能 但目标运行的顺序是错误的 我尝试通过 构建 gt 发布 We