0

我想知道是否可以在发布时包含一些排除文件夹的子文件夹。假设我有这个结构:

/Folder1/
/Folder1/FileX
/Folder1/FileY
/Folder1/SubFolder1/
/Folder1/SubFolder2/

我想要的是排除整个Folder1内容,但只包括一组特定的子文件夹(在我的示例中为SubFolder1)。

Folder1文件夹与 .pubxml 中的ExcludeFoldersFromDeployment一起排除:

<ExcludeFoldersFromDeployment>Folder1</ExcludeFoldersFromDeployment>
4

2 回答 2

0

我想知道是否可以在发布时包含一些排除文件夹的子文件夹。

是的,这是可能的。

注意:有一点我们应该知道,因为您在 .pubxml 中使用了“ExcludeFoldersFromDeployment”元素来排除整个 Folder1 目录。.xxproj 文件中的一些部署操作可能会被它覆盖或影响。

因此,要实现您的目标,我们必须遵循两个步骤: 1. 将 SubFolder 复制到一个新文件夹($(ProjectDir) 中的新文件夹会更好) 2. 添加要发布的 SubFolder 的内容,并选择您的结构想

这是一个解决方法:

1:在 .csproj 文件中添加 PreBuildEvent prorerty。

  <PropertyGroup>
    <PreBuildEvent>xcopy "$(ProjectDir)/Folder1/SubFolder1" "$(ProjectDir)/NewFolder" /E /Y /I</PreBuildEvent>
  </PropertyGroup>

2:在 .csproj 文件中添加以下标记,它有助于将额外的文件发布到 Asp.net 中的发布文件夹:

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

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

对于这个标记,我们只需要更改两条路径即可满足我们的需求。

第一:CustomFiles 指的是要发布内容的文件夹。

第二:MyStructureUnderPublishFolder 是指发布文件夹下你想要的结构。如果您想要一个在部署后只有一个子文件夹的 Folder1,请将其更改为 Folder1/SubFolder1,或者如果您希望在 Publish 文件夹下有一个简单的 Subfolder1,请将其更改为 SubFolder1。

有关添加额外文件以发布的更多信息,请参见此处

于 2019-02-18T06:04:40.343 回答
0

你还没有告诉我们这个 .pubxml 文件是什么,所以我们可以帮助你的东西是有限的。

但总的来说:

在 MSBuild 中处理文件和文件夹的构造是 Items。您需要一个 Item ,而不是MSBuild 属性。

因此,您可以轻松地使用项目指向构建环境中的特定子文件夹,如下所示:

<ItemGroup>
  <!-- This will grab all files in SubFolder1 but not recursively -->
  <DeployThese Include="/Folder1/SubFolder1/*.*" />
</ItemGroup>

然后,您可以对该项目做任何您想做的事情。您可以将其中的文件复制到其他地方,或者其他任何地方。

稍后通过使用访问文件@(DeployThese)

于 2019-02-12T17:05:20.393 回答