首页 > 解决方案 > 添加 umbraco 文件夹以使用 MsBuild 构建

问题描述

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

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

我们如何将ajaxmin创建的文件包含在MSBuild创建的msdeploy包中

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

但是,它们并没有被复制到输出文件夹中。我错过了什么吗?

标签: visual-studiomsbuildumbraco

解决方案


您可以使用msbuild 目标(在构建结束后运行),在该目标中它调用msbuild 复制任务将必要的文件或文件夹复制到输出文件夹。使用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复制任务以将文件复制到具有原始文件夹结构的目标路径。如果您只想将所有文件复制到输出文件夹,则不需要设置它,那么脚本应该是:

<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),来自马里奥的提示!


推荐阅读