Создание папки внутри приложения debug или release con console

#c#-4.0 #compilation #console-application #directory

#c #-4.0 #Сборник #консоль-приложение #каталог

Вопрос:

у меня есть консольное приложение в vs2010 (C #), и в проекте у меня есть папка, добавленная мной (щелкните правой кнопкой мыши на project .. add-> папка), и я хочу, чтобы при компиляции приложения (debug или release) папка была создана (если она не существует)в каталоге debug или release.

Возможно ли это?

Консольное приложение представляет собой демон, который обращается к базе данных и отправляет электронные письма с шаблонами, размещенными в этой папке.

Надеюсь, вы сможете мне помочь. Спасибо!

Ответ №1:

Не существует «автоматического» способа заставить VS создавать папки (отличные от указанной выходной папки) во время сборки, но есть два довольно простых способа сделать это.

  • Используйте событие после сборки, которое вы настраиваете на вкладке События сборки в свойствах вашего проекта. По сути, это пакетный файл, который вы запускаете после завершения сборки, что-то вроде этого:

     IF NOT EXIST $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
    XCOPY /D $(ProjectDir)MySubFolder*.tmpl $(OutDir)MySubFolder
      
  • Используйте событие AfterBuild от MSBuild. Это мой предпочтительный метод, в основном потому, что он лучше интегрируется с нашим автоматизированным процессом сборки, но он немного сложнее:

    1. Щелкните правой кнопкой мыши на узле вашего проекта и выгрузите его
    2. Щелкните правой кнопкой мыши на незагруженном узле проекта и отредактируйте файл
    3. В нижней части находится закомментированная пара XML-узлов. Раскомментируйте цель AfterBuild и замените ее чем-то вроде этого:

       <Target Name="AfterBuild">
          <MakeDir Directory="$(OutDir)MySubFolder" Condition="!Exists('$(OutDir)MySubFolder')" />
      
          <CreateItem Include="$(ProjectDir)MySubFolder*.tmpl">
            <Output TaskParameter="Include" ItemName="Templates" />
          </CreateItem>    
      
          <Copy SourceFiles="@Templates" DestinationFolder="$(OutDir)MySubFolder" ContinueOnError="True" />
      </Target>
        
    4. Сохраните изменения, закройте файл .csproj, затем щелкните правой кнопкой мыши и перезагрузите проект.

Комментарии:

1. Вау! приятно! единственное, что в папке Release (или Debug) создается папка, но внутри ничего не копируется, а в папке relese появляется каталог bin с папкой release внутри.

Ответ №2:

Я решаю это следующим образом: в csproj:

 <Target Name="AfterBuild">
    <MakeDir Directories="$(OutDir)EmailTemplates" Condition="!Exists('$(OutDir)EmailTemplates')" />
    <ItemGroup>
      <Templates Include="$(ProjectDir)EmailTemplates*.*" />
    </ItemGroup>
    <Copy SourceFiles="@(Templates)" DestinationFolder="$(OutDir)EmailTemplates" />
  </Target>
  

Спасибо за вашу помощь!