Как скопировать и переименовать файл в выходную папку как часть сборки - PullRequest
0 голосов
/ 25 октября 2019

Я считаю, что это больше вопрос, связанный с msbuild. У меня есть ядро ​​.net, и мне нужно условно опубликовать файл, и на основе конфигурации сборки, выбранной в Visual Studio 2019, файл должен быть переименован перед публикацией в целевой.

Так что я смотрю на изменение csprojфайл (который является не чем иным, как самим файлом msbuild) Я не вижу опции условия в задаче копирования https://docs.microsoft.com/en-us/visualstudio/msbuild/copy-task?view=vs-2019

Цель, которую я преследую, - это если у меня есть 3 разных файлаtester-notes.dev.json tester-notes.debug.json tester-notes.prod.json

Если в качестве конфигурации сборки выбран prod, я хочу, чтобы опубликованный файл был tester-notes.prod.json, но переименован в tester-notes.json

1 Ответ

0 голосов
/ 28 октября 2019

Предполагая, что у вас есть три файла (действие сборки = Нет) в обозревателе решений при разработке:

enter image description here

Вы можете использовать что-то похожее на этот скрипт дляпереименуйте и скопируйте в папку публикации, если вы используете FileSystem режим публикации:

<ItemGroup Condition="$(Configuration)=='Dev'">
    <FileToRename Include="$(ProjectDir)\tester-notes.dev.json" />
  </ItemGroup>
  <ItemGroup Condition="$(Configuration)=='Debug'">
    <FileToRename Include="$(ProjectDir)\tester-notes.debug.json" />
  </ItemGroup>
  <ItemGroup Condition="$(Configuration)=='Prof'">
    <FileToRename Include="$(ProjectDir)\tester-notes.prof.json" />
  </ItemGroup>

  <Target Name="DoSthAfterPublish1" AfterTargets="Publish" Condition="$(Configuration)=='Dev'">
    <Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.dev.json','.json'))"/>
    <Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
  </Target>

  <Target Name="DoSthAfterPublish2" AfterTargets="Publish" Condition="$(Configuration)=='Debug'">
    <Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.debug.json','.json'))"/>
    <Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
  </Target>

  <Target Name="DoSthAfterPublish3" AfterTargets="Publish" Condition="$(Configuration)=='Prof'">
    <Copy SourceFiles="@(FileToRename)" DestinationFiles="@(FileToRename->Replace('.prof.json','.json'))"/>
    <Move SourceFiles="$(ProjectDir)\tester-notes.json" DestinationFolder="$(PublishDir)" OverwriteReadOnlyFiles="true"/>
  </Target>

И если вы можете сбросить tester-notes.debug.json на tester-notes.Debug.json ,, тогда мы можем объединить три цели в одну,используя DestinationFiles="@(FileToRename->Replace('.$(Configuration).json','.json'))". Надеюсь, что это поможет:)

Кроме того:

Согласно Intellisense мы можем найти Copy task поддерживает Condition:

enter image description here

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