【问题标题】:Adding umbraco folders to build with MsBuild添加 umbraco 文件夹以使用 MsBuild 构建
【发布时间】:2019-07-31 13:08:53
【问题描述】:

如果我使用 msbuild 构建我的项目,我的解决方案中未包含的所有文件夹都不会部署。有没有办法使用 msbuild 部署 umbracoumbraco_client 文件夹? 我尝试过使用以下目标:

https://gist.github.com/aaronpowell/6695293

How can we include the files created by ajaxmin in the msdeploy package created by MSBuild

https://blog.samstephens.co.nz/2010/10/18/msbuild-including-extra-files-multiple-builds/

但是嘿没有被复制到输出文件夹。我错过了什么吗?

【问题讨论】:

  • 当您想将这些文件夹复制到输出文件夹时,是在真正的构建过程开始之前还是在构建结束之后复制它们?另外,umbraco 和 umbraco_client 文件夹存在于哪个目录中?
  • 我想在构建后将它们复制到最终输出文件夹中进行部署。这两个文件夹物理上已经存在于项目的文件夹中,但不包含在 VS 项目中。

标签: visual-studio msbuild umbraco


【解决方案1】:

您可以使用msbuild target(在构建结束后运行)调用msbuild copy task 将必要的文件或文件夹复制到输出文件夹。使用AfterTargets="build" 让目标在构建后运行。

在我的机器上运行的目标脚本如下所示:

<Target Name="Copyumbraco" AfterTargets="build">
    <ItemGroup>
      <UmbracoFiles Include="$(ProjectDir)**\umbraco\**\*" />
      <Umbraco_ClientFiles Include="$(ProjectDir)**\umbraco_client\**\*" />
    </ItemGroup>
    <Copy SourceFiles="@(UmbracoFiles)" DestinationFolder="$(OutputPath)\%(RecursiveDir)"/>
    <Copy SourceFiles="@(Umbraco_ClientFiles)" DestinationFolder="$(OutputPath)\%(RecursiveDir)"/>
  </Target>

使用$(ProjectDir) 属性来定义路径,因此如果这两个文件夹位于project folder 中,如您在评论中提到的,Msbuild 可以找到它们。

\%(RecursiveDir) 设置 msbuild copy task 以将文件复制到具有原始文件夹结构的目标路径。如果您只想将所有 文件 复制到 Output 文件夹,则不需要设置它,那么脚本应该是:

<Target Name="Copyumbraco" AfterTargets="build">
    <ItemGroup>
      <UmbracoFiles Include="$(ProjectDir)**\umbraco\**\*" />
      <Umbraco_ClientFiles Include="$(ProjectDir)**\umbraco_client\**\*" />
    </ItemGroup>
    <Copy SourceFiles="@(UmbracoFiles)" DestinationFolder="$(OutputPath)"/>
    <Copy SourceFiles="@(Umbraco_ClientFiles)" DestinationFolder="$(OutputPath)"/>
  </Target>

将目标脚本添加到项目的project file(xx.csproj)中,确保将脚本按以下格式放置,然后在使用msbuild构建项目时它可以工作。

<Project Sdk="Microsoft.NET.Sdk.Web">

  ...

  <Target Name="Copyumbraco" AfterTargets="build">
   ...
  </Target>
</Project>

另外:

对于控制台应用程序、类库等普通项目,$(OutputPath) 表示输出路径。但是对于网站项目,我们可以使用$(WebProjectOutputDir),来自Mario的提示!

【讨论】:

  • 我想补充一点,因为 Umbraco 是一个网站项目,我不得不使用 $(WebProjectOutputDir) 而不是 $(OutputPath)
  • @MarioLopez 感谢您的回复,我将在答案中添加$(WebProjectOutputDir)
猜你喜欢
  • 2011-09-09
  • 2020-03-14
  • 2016-09-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多