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

4 回答 4

15

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

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

如果您在 中的某处有空格,则引号很重要$(TargetDir),但无论出于鲁棒性考虑,我都会使用它们。

于 2014-02-04T11:01:33.713 回答
6

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

不过我还是想知道有没有更好的选择...

于 2012-11-02T12:29:02.210 回答
0

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

于 2012-11-02T12:35:34.547 回答
0

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

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

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

于 2013-09-17T17:52:56.090 回答