在调试或发布控制台应用程序中创建文件夹

发布于 2024-12-11 17:32:59 字数 200 浏览 0 评论 0原文

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

这可能吗?

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

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

i have a console application in vs2010 (C#) and in the project, i have a Folder added by me (right click on project.. add->folder) and i want that when i compile the application (debug or release), then the folder will be created (if not exists) in the debug or release directory.

Is that possible?

The console application is a daemon that access to a database and send emails with templates allocated in that folder.

I hope you can help me. Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美胚控场 2024-12-18 17:32:59

没有“自动”方法让 VS 在构建期间创建文件夹(指定的输出文件夹除外),但有两种非常简单的方法可以完成它。

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

    如果不存在 $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
    XCOPY /D $(ProjectDir)MySubFolder\*.tmpl $(OutDir)MySubFolder
    
  • 使用 MSBuild 的 AfterBuild 事件。这是我的首选方法,主要是因为它与我们的自动化构建过程集成得更好,但它涉及更多一些:

    1. 右键单击您的项目节点并将其卸载
    2. 右键单击已卸载的项目节点并编辑文件
    3. 底部附近是一对注释掉的 XML 节点。取消注释 AfterBuild 目标并将其替换为如下内容:

      <目标名称=“AfterBuild”>
          >
      
          
            <输出任务参数=“包含” ItemName=“模板”/>
              
      
          <复制 SourceFiles="@Templates" DestinationFolder="$(OutDir)MySubFolder" ContinuousOnError="True" />
      
      
    4. 保存更改,关闭 .csproj 文件,然后右键单击并重新加载项目。

There's no "automatic" way to get VS to create folders (other than the specified output folder) during a build, but there's two pretty easys ways to accomplish it.

  • Use a post-build event, which you set up in the Build Events tab of your project's properties. This is basically a batch file that you run after the build completes, something like this:

    IF NOT EXIST $(OutDir)MySubFolder MKDIR $(OutDir)MySubFolder
    XCOPY /D $(ProjectDir)MySubFolder\*.tmpl $(OutDir)MySubFolder
    
  • Use MSBuild's AfterBuild event. This is my preferred method, mostly because it integrates better with our automated build process, but it's a little more involved:

    1. Right-click on your project node and Unload it
    2. Right-click on the unloaded project node and Edit the file
    3. Near the bottom is a commented-out pair of XML nodes. Uncomment the AfterBuild target and replace it with something like this:

      <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. Save the changes, close the .csproj file, then right-click and Reload the project.

独﹏钓一江月 2024-12-18 17:32:59

我这样解决:
在 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>

谢谢您的帮助!

I solve it, like this:
in the 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>

Thank you for your help!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文