如何在Visual Studio 2010中创建一个空文件夹?

8
我有一个VS2010项目,需要在bin\debug目录下创建一个dataIn和一个dataOut目录,以便运行一些测试。
创建dataIn目录很容易-只需将包含内容的文件夹添加到项目中,并将其包含的每个文件的“复制到输出目录”属性设置为“始终复制”(或编辑项目文件以使用通配符捕获所有文件,如SO上其他答案所建议的)- VS会自动创建该目录,以便可以将文件复制到其中。
我的问题是:如何确保在需要时自动创建dataOut目录?
由于没有文件需要放入其中,因此ItemGroup中没有任何关于此目录的内容。如果我手动向项目文件添加目录条目,则会出现错误:
"<path>\dataOut" is actually a directory.  The "Copy" task does not support copying directories.

(编辑:从目录名称中删除下划线,以便斜体字能够正常工作!)
4个回答

15

在预构建步骤中尝试以下操作:

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

如果在$(TargetDir)的某个地方有空格,那么引号很重要,但为了鲁棒性,我会始终使用它们。


7

到目前为止,我采取的一种方法是在文件夹中添加一个虚拟文本文件,并将其“复制到输出目录”属性设置为“始终复制”。我还添加了一个后期构建步骤来删除虚拟文件,留下空文件夹(尽管对于这个特定的项目来说,这只是因为我的挑剔 - 如果没有它,不会有任何影响)。

不过,我仍然想知道是否有更好的选择...


0
刚刚分享了这个困境,我想最简单的处理方法就是通过编程创建目录。
if(!Directory.Exists(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName"))
{
    Directory.CreateDirectory(AppDomain.CurrentDomain.BaseDirectory + "yourDirectoryName");
}

我不确定你正在使用哪种类型的应用程序,但是winform应用程序可以在它们的Main方法中实现这一点,而Web应用程序可以在许多地方实现。


dataOut目录仅在开发环境中运行某些测试时才需要。在永远不需要它的客户系统上添加显式代码来创建它并不是正确的方法! - Rob Gilliam

0

在预构建步骤中加入一些mkdirs怎么样?


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接