Visual Studio中的后期构建事件路径

6
我有以下问题:由于Visual Studio无法处理链式引用,我需要将所有“链式引用” DLL复制到我的程序的bin文件夹中。为此,我使用Robocopy。 唯一的问题是,我在Visual Studio后期构建事件中输入的命令行被错误地拆分。
ROBOCOPY "$(TargetDir)" "$(SolutionDir)Map\bin\$(ConfigurationName)\" *.dll /LOG:RCPY.log

这是我的构建事件。我现在得到的只有以下内容:
Gestartet: Fri Jul 06 15:40:30 2012

Quelle : F:\Sicherung\Visual Studio\Projects\Map\Core\Core.GUI\bin\Release\ F:\Sicherung\Visual\
Ziel : F:\Sicherung\Visual Studio\Projects\Map\Core\Core.GUI\bin\Release\Studio\Projects\Map\Map\bin\Release\

Dateien : *.dll

Optionen: /COPY:DAT /R:1000000 /W:30

为什么呢?因为在第二个路径/参数的“Visual Studio”处有一个空格,导致它被分割。

我尝试了各种引号,但是要么Robocopy没有执行(至少日志文件没有被覆盖),要么就会显示上述日志条目...

而且Visual Studio显示:

命令...以代码16退出

这意味着有一个致命错误,大多数情况下是由于无效路径引起的。


1
这是一个.NET还是C++项目?如果是.NET项目,请将Copy Local设置为true或使用项目引用,那么被引用的程序集将自动复制到输出文件夹中。 - Dirk Vollmar
由于Visual Studio无法处理链式引用,你能解释一下吗?因为我从未有过手动复制dll的经历。 - Steve B
你尝试过使用 echo "<combined/path" 来调试路径,确保它们是正确的吗? - abatishchev
抱歉,这是一个 .Net 项目。复制本地不起作用。我有一个主项目“Map”。还有子项目叫做“Core.GUI”等等。Core.GUI 还引用了像 AvalonDock 这样的第三方库。现在,如果我构建整个解决方案,在主项目的 bin 文件夹中只有“Core.GUI.dll”,而不是它所引用的那些 DLL。这些库只在“Core.GUI”的 bin 文件夹中...正因为如此,我的项目从来没有工作过(抛出 FileNotFoundException)...我该如何精确调试路径? - SharpShade
尝试这篇文章中的解决方案: https://dev59.com/22gu5IYBdhLWcg3wGTSd#12008312 - JoshL
1个回答

10

与xcopy不同,robocopy将\视为转义字符,如http://ss64.com/nt/robocopy.html所述:

 

如果源或目标是“带引号的长文件夹名称”,请不要包括尾部反斜杠,因为它将被视为转义字符,即“C:\ some path \”将失败,但“C:\ some path \”或“C:\ some path。”或“C:\ some path”将起作用。

由于后置生成宏已经包含尾部反斜杠,因此您需要在源和目标参数的末尾添加第二个反斜杠或句点:

ROBOCOPY "$(TargetDir)." "$(SolutionDir)Map\bin\$(ConfigurationName)\." *.dll /LOG:RCPY.log

我建议添加句点,因为这样可以消除转义字符而不是绕过它。


我会记住的,但我在问之后不久就成功了(2012年)。尽管如此还是谢谢。 - SharpShade
1
我想你可能已经不再寻找解决方案了,但我想为其他遇到这个问题的人(就像我一样)发布这篇文章。 - BradV

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