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

Pho*_*_uy 2 directory compilation console-application c#-4.0

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

那可能吗?

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

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

Mic*_*eld 7

在构建过程中没有"自动"方式让VS创建文件夹(指定的输出文件夹除外),但有两种方法可以实现它.

  • 使用您在项目属性的"构建事件"选项卡中设置的构建后事件.这基本上是在构建完成后运行的批处理文件,如下所示:

    IF NOT EXIST $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
    XCOPY /D $(ProjectDir)MySubFolder\*.tmpl $(OutDir)MySubFolder
    
    Run Code Online (Sandbox Code Playgroud)
  • 使用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>
      
      Run Code Online (Sandbox Code Playgroud)
    4. 保存更改,关闭.csproj文件,然后右键单击并重新加载项目.


Pho*_*_uy 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>
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!