Создать папку внутри отладочной или релизной консольного приложения - PullRequest
2 голосов
/ 21 октября 2011

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

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

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

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

Ответы [ 2 ]

7 голосов
/ 21 октября 2011

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

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

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

    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, затем щелкните правой кнопкой мыши и перезагрузите проект.

5 голосов
/ 22 октября 2011

Я решаю это так: в 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>

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

...