Pho*_*_uy 2 directory compilation console-application c#-4.0
我在vs2010(C#)中有一个控制台应用程序,在项目中,我有一个由我添加的文件夹(右键单击项目.. add->文件夹),我想在编译应用程序(调试或发布)时,然后将在调试或发布目录中创建该文件夹(如果不存在).
那可能吗?
控制台应用程序是一个守护程序,可以访问数据库并使用在该文件夹中分配的模板发送电子邮件.
我希望你能帮助我.谢谢!
在构建过程中没有"自动"方式让VS创建文件夹(指定的输出文件夹除外),但有两种方法可以实现它.
使用您在项目属性的"构建事件"选项卡中设置的构建后事件.这基本上是在构建完成后运行的批处理文件,如下所示:
IF NOT EXIST $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
XCOPY /D $(ProjectDir)MySubFolder\*.tmpl $(OutDir)MySubFolder
Run Code Online (Sandbox Code Playgroud)使用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>
Run Code Online (Sandbox Code Playgroud)保存更改,关闭.csproj文件,然后右键单击并重新加载项目.
我解决了,就像这样:在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>
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!