【问题标题】:Visual studio 2017 Excludefoldersfromdeployment but include some subfolderVisual Studio 2017 Excludefoldersfromdeployment 但包含一些子文件夹
【发布时间】:2019-07-06 01:24:21
【问题描述】:

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

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

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

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

<ExcludeFoldersFromDeployment>Folder1</ExcludeFoldersFromDeployment>

【问题讨论】:

  • 你的意思是整个Folder1?仅包含 SubFolder1 的 Folder1 还是简单的 SubFolder1?期待您的回复。

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


【解决方案1】:

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

但总的来说:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    是的,这是可能的。

    注意:有一点我们应该知道,因为您在 .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 在部署后只有一个 SubFolder,请将其更改为 Folder1/SubFolder1,或者如果您想要 Publish 文件夹下的一个简单的 Subfolder1,则将其更改为 SubFolder1。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-29
      • 1970-01-01
      • 2022-07-06
      • 2017-08-03
      • 2017-09-18
      • 1970-01-01
      • 2019-02-09
      相关资源
      最近更新 更多