我在vs2010(C#)中有一个控制台应用程序,在项目中,我有一个由我添加的文件夹(右键单击项目.. add->文件夹),我希望在编译应用程序时(调试或然后,将在调试或发布目录中创建文件夹(如果不存在)。
这可能吗?
控制台应用程序是一个守护程序,它可以访问数据库并使用在该文件夹中分配的模板发送电子邮件。
我希望你能帮助我。谢谢!
答案 0 :(得分:7)
在构建期间没有“自动”方式让VS创建文件夹(指定的输出文件夹除外),但有两种方法可以实现它。
使用您在项目属性的“构建事件”选项卡中设置的构建后事件。这基本上是在构建完成后运行的批处理文件,如下所示:
IF NOT EXIST $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
XCOPY /D $(ProjectDir)MySubFolder\*.tmpl $(OutDir)MySubFolder
使用MSBuild的AfterBuild事件。这是我首选的方法,主要是因为它与我们的自动构建过程更好地集成,但它更复杂:
底部附近是一对注释掉的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 :(得分:5)
我解决了,像这样: 在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>
感谢您的帮助!