Visual studio 2017 Исключить папки из развертывания, но включить некоторые подпапки - PullRequest
0 голосов
/ 12 февраля 2019

Мне было интересно, можно ли при публикации включить некоторую подпапку из исключенной папки.Давайте предположим, что у меня есть такая структура:

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

Что я хочу, это исключить весь Folder1 контент, но включить только определенный набор подпапок (в моем примере SubFolder1 ).

Папка Папка1 исключена с ExcludeFoldersFromDeployment в .pubxml:

<ExcludeFoldersFromDeployment>Folder1</ExcludeFoldersFromDeployment>

Ответы [ 2 ]

0 голосов
/ 18 февраля 2019

Мне было интересно, можно ли при публикации включить какую-либо подпапку из исключенной папки.

Да, это возможно.

Примечание: один момент, который мы должны знать, поскольку вы использовали элемент «ExcludeFoldersFromDeployment» в .pubxml для исключения всего каталога Folder1.Некоторые действия по развертыванию в файле .xxproj могут быть перезаписаны или затронуты им.

Итак, чтобы достичь вашей цели, мы должны выполнить два шага: 1. Скопировать подпапку в новую папку (новая папка в $ (ProjectDir) может быть лучше) 2. Добавить содержимое подпапки для публикациии выберите нужную структуру

Вот обходной путь:

1: добавьте свойство PreBuildEvent в файл .csproj.

  <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 ссылается на структуру, которую вы хотите разместить в папке публикации.Если вам нужна папка 1, в которой после развертывания имеется только вложенная папка, измените ее на Folder1 / SubFolder1 или измените ее на SubFolder1, если вы хотите создать простую вложенную папку 1 в папке «Опубликовать».

Дополнительная информация о добавлении дополнительных файлов в папкуопубликовать см. здесь .

0 голосов
/ 12 февраля 2019

Вы не сказали нам, что это за файл .pubxml, поэтому есть предел того, с чем мы можем вам помочь.

Но в целом:

Конструкция, которая имеет дело сфайлы и папки в MSBuild это Предметы.Вам нужен элемент здесь, , а не свойство MSBuild.

Таким образом, вы можете легко использовать элемент для указания на конкретную подпапку в вашей среде сборки, например:

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

Затем вы можете делать с этим Предметом все, что захотите.Вы можете скопировать файлы в другое место или что-нибудь еще с ними.

К файлам можно получить доступ позже, используя @(DeployThese)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...