CopyAllFilesToSingleFolderForPackageDependsOn和Web Deploy

时间:2016-01-25 19:35:29

标签: deployment msbuild visual-studio-2015

我正在使用Visual Studio 2015的Web Deploy功能将我的Type Script SPA项目部署到我的登台服务器。

我希望部署过程将一些特定于部署的文件从项目的/ Deployment文件夹复制(并重命名)到项目的其他特定位置。

一个这样的例子是:

[project_root] /Deployment/index.remote.debug.html ---> [project_root] /index.html

我设法使用我的发布配置文件(.pubxml)中的以下部分实现了这一点:

<Target Name="index_html">
  <ItemGroup>
    <_CustomFiles Include="Deployment/index.remote.debug.html" />
    <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>index.html</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>
<Target Name="extractor_config">
  <ItemGroup>
    <_CustomFiles Include="Deployment/extractor.config.remote.debug.js" />
    <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
      <DestinationRelativePath>extractor.config.js</DestinationRelativePath>
    </FilesForPackagingFromProject>
  </ItemGroup>
</Target>

<PropertyGroup>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    index_html;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    extractor_config;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>

</PropertyGroup>

但这仅适用于使用&#39;文件系统&#39;发布到文件系统的情况。选项。 使用&#39; Web Deploy&#39;发布到我的登台服务器时选项,我认为没有效果。 该应用程序已正确部署,但各个文件无法复制/重命名。

Visual Studio输出中也没有与此类Web部署相关的错误消息。

如果我以非管理员或管理员身份部署,则没有任何区别。

有谁知道,问题出在哪里?

关于MSBuild,我是一个完全的外行,这是我第一次遇到。我只是在其他人的在线体验的帮助下把它放在一起。

2 个答案:

答案 0 :(得分:9)

您需要一个名称略有不同的元素。你有:

  <CopyAllFilesToSingleFolderForPackageDependsOn>
    index_html;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>
  <CopyAllFilesToSingleFolderForPackageDependsOn>
    extractor_config;
    $(CopyAllFilesToSingleFolderForPackageDependsOn);
  </CopyAllFilesToSingleFolderForPackageDependsOn>

尝试使用几乎相同的部分但使用此标记:

  <CopyAllFilesToSingleFolderForMsdeployDependsOn>

注意它是ForMsdeploy而不是ForPackage

答案 1 :(得分:3)

除了Rhyous的出色答案外,请注意MS docs表示您应该同时拥有CopyAllFilesToSingleFolderForPackageDependsOnCopyAllFilesToSingleFolderForMsdeployDependsOn,例如

<PropertyGroup>
    <CopyAllFilesToSingleFolderForPackageDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForPackageDependsOn);
    </CopyAllFilesToSingleFolderForPackageDependsOn>

    <CopyAllFilesToSingleFolderForMsdeployDependsOn>
      CustomCollectFiles;
      $(CopyAllFilesToSingleFolderForMsdeployDependsOn);
    </CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>

我已经通过编辑项目文件来使它起作用,但是引用的文档已在发布配置文件中进行了此编辑,我想这样更有效。