在debug或release con console应用程序中创建文件夹

时间:2011-10-21 12:19:28

标签: c#-4.0 compilation console-application directory

我在vs2010(C#)中有一个控制台应用程序,在项目中,我有一个由我添加的文件夹(右键单击项目.. add->文件夹),我希望在编译应用程序时(调试或然后,将在调试或发布目录中创建文件夹(如果不存在)。

这可能吗?

控制台应用程序是一个守护程序,它可以访问数据库并使用在该文件夹中分配的模板发送电子邮件。

我希望你能帮助我。谢谢!

2 个答案:

答案 0 :(得分:7)

在构建期间没有“自动”方式让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文件,然后右键单击并重新加载项目。

答案 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>

感谢您的帮助!