#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. Это мой предпочтительный метод, в основном потому, что он лучше интегрируется с нашим автоматизированным процессом сборки, но он немного сложнее:
- Щелкните правой кнопкой мыши на узле вашего проекта и выгрузите его
- Щелкните правой кнопкой мыши на незагруженном узле проекта и отредактируйте файл
-
В нижней части находится закомментированная пара 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>
-
Сохраните изменения, закройте файл .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>
Спасибо за вашу помощь!