ASP.NET - 在发布时复制额外文件不能递归工作

时间:2016-10-14 20:44:48

标签: asp.net msbuild

我有一个要发布到Web服务器的Web应用程序项目。有一个文件文件夹未包含在项目中,但在发布时需要复制。我发现了一些关于如何使用MSBuild进行复制的帖子,但我不能让它在我想要复制的主文件夹中递归复制所有文件/文件夹。

我要复制的文件夹是(proj)/ Scripts。 (此目录从应用程序项目中排除,因为我将所有JavaScript代码放在同一解决方案的单独项目中,并且在执行缩小和其他构建任务后,将从JS项目的输出文件夹中复制此文件夹。)

以下是我添加到* .csproj文件中的部分:

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

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="Scripts\*" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath> 
            <!-- whitespace and new line added for question readability -->
            Scripts\%(RecursiveDir)%(Filename)%(Extension)  
        </DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

这将复制/ Scripts文件夹顶层的所有文件,但子文件夹中没有任何内容。

如何使其递归?

修正了我自己的问题:

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

  <Target Name="CustomCollectFiles">
    <ItemGroup>
      <_CustomFiles Include="Scripts\**\*.*" />
      <FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
        <DestinationRelativePath>Scripts\%(RecursiveDir)%(Filename)%(Extension)</DestinationRelativePath>
      </FilesForPackagingFromProject>
    </ItemGroup>
  </Target>

<_CustomFiles Include="Scripts\*" />必须更改为

<_CustomFiles Include="Scripts\**\*.*" />

1 个答案:

答案 0 :(得分:0)

这对我有用:

  <ItemGroup>
    <Content Include="YourTargetDir\**\*.*">
      <Link>YourTargetDir\%(RecursiveDir)%(Filename)%(Extension)</Link>
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>