Visual Studio 2017从部署中排除文件夹,但包含一些子文件夹

时间:2019-02-12 11:42:26

标签: visual-studio .net-core msbuild webdeploy pubxml

我想知道是否有可能在发布中包括排除文件夹的某些子文件夹。 假设我具有以下结构:

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

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

Folder1 文件夹被.pubxml中的 ExcludeFoldersFromDeployment 排除:

<ExcludeFoldersFromDeployment>Folder1</ExcludeFoldersFromDeployment>

2 个答案:

答案 0 :(得分:0)

您尚未告诉我们这个.pubxml文件是什么,因此我们可以为您提供帮助的范围是有限的。

但一般来说:

在MSBuild中处理文件和文件夹的构造为Items。 您需要此处的项目,而不是不是 MSBuild属性。

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

--help

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

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

访问文件

答案 1 :(得分:0)

  

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

是的,有可能。

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

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

  

这是一种解决方法:

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

  <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引用您想要在publish文件夹下的结构。如果希望在部署后只在其中包含SubFolder的Folder1,请将其更改为Folder1 / SubFolder1,如果要在“发布”文件夹下使用简单的Subfolder1,则将其更改为SubFolder1。

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