【问题标题】:How to create an empty folder on build in Visual Studio 2010?如何在 Visual Studio 2010 中创建一个空文件夹?
【发布时间】:2012-11-02 11:36:15
【问题描述】:

我有一个 VS2010 项目,需要在 bin\debug 目录中创建一个 dataIn 和一个 dataOut 目录,以允许一些测试运行。

创建 dataIn 目录很容易 - 只需将包含内容的文件夹添加到项目中,并将其中包含的每个文件的“复制到输出目录”属性设置为“始终复制”(或编辑项目文件以使用通配符来捕获所有文件,如 SO 上的其他答案所建议的那样) - 该目录将由 VS 自动创建,以便可以将文件复制到其中。

我的问题:如何确保在需要时自动创建 dataOut 目录?

里面没有文件可以进去,所以在ItemGroup中这个目录没有任何东西。如果我手动将目录条目添加到项目文件中,则会出现错误:

"<path>\dataOut" is actually a directory.  The "Copy" task does not support copying directories.

(编辑:从目录名称中删除下划线,以便斜体可以使用!)

【问题讨论】:

    标签: visual-studio-2010


    【解决方案1】:

    在预构建步骤中试试这个:

    if not exist "$(TargetDir)dataOut" mkdir "$(TargetDir)dataOut"
    

    如果您在 $(TargetDir) 中的某处有空格,则引号很重要,但我会使用它们,而不考虑稳健性。

    【讨论】:

      【解决方案2】:

      到目前为止,我管理的一种方法是将虚拟文本文件添加到文件夹并将其“复制到输出目录”属性设置为“始终复制”的相当明显的步骤。我还添加了一个构建后步骤以在之后删除虚拟文件,留下现在为空的目录(尽管对于这个特定的项目,这实际上只是由于我的大惊小怪 - 如果它不是没有影响那里)。

      不过我还是想知道是否有更好的选择……

      【讨论】:

        【解决方案3】:

        预构建步骤中的一些 mkdir 怎么样?

        【讨论】:

        • 我认为 EvilTeach 实际上提供了一个答案(尝试使用 MKDIR 在构建前/构建后的步骤中显式创建目录),尽管是反问形式。我避免这样做的原因是它变得更加复杂,因为您还必须首先测试目录的存在等等。理想情况下,我希望避免记住项目中有构建前/构建后的步骤如果可能的话,因为它们不像解决方案资源管理器中的文件夹那么明显(尽管我确实有构建后步骤来整理当前解决方案中的虚拟文件)
        • 我用来发布构建以将 api 标头复制到公共包含目录。
        【解决方案4】:

        刚刚分享了这个困境,我突然想到处理这个问题的最简单方法是简单地以编程方式创建目录。

        if(!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName"))
        {
            Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName");
        }
        

        我不确定您正在使用哪种类型的应用程序,但 winform 应用程序可以在其 Main 方法中执行此操作,而 Web 应用程序可以在许多地方执行此操作。

        【讨论】:

        • dataOut 目录只需要在开发环境中运行一些测试。添加显式代码以在永远不需要它的客户系统上创建它不是要走的路!
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-27
        • 2012-02-10
        • 2012-10-10
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多