我正在Windows XP中使用Monodevelop
4开发一个项目,在构建完一些.dll
库文件后,我需要将它们复制到某个文件夹中。这些库是主项目的插件,因此主项目不依赖于它们,需要手动复制它们。
但由于我们使用的是计算机,实际上没有什么需要手动完成的,所以我在项目设置中使用了Monodedevelop的Custom Commands
。在那里,我可以输入任何我喜欢的命令(据说)。
以下是我所做的;首先,我添加了一个命令来确保目标文件夹存在:
mkdir "${SolutionDir}MainProjbin${ProjectConfigName}Plugins"
然后复制库:
xcopy "${TargetFile}" "${SolutionDir}MainProjbin${ProjectConfigName}Plugins" /Y
但问题是第一个命令失败了,所以第二个命令永远不会执行。为了查看第一个命令的结果,我选中了名为Run on external console
和Pause console ouput
的复选框,下面是它的输出:
'"mkdir"' is not recognized as an internal or external command,
operable program or batch file.
Press any key to continue . . .
在IDE的输出面板中,我可以读取正确的mkdir "C:SomePathMainProjbinDebugPlugins"
,当我将其粘贴到控制台中时,我成功地创建了文件夹,所以我不知道为什么Monodedevelop无法执行它!
有人对这个问题有什么意见吗?
我自己找到了一个解决方案。我创建了一个包含mkdir
命令的batch
文件,并在项目的Custom Commands
中调用它。
我能够在Xamarin Studio(版本4.2.5)中通过使用xcopy
而不是copy
来解决此问题,并提供到xcopy.exe
:的完整路径
"%systemroot%system32xcopy.EXE" /y "${ProjectDir}myAppSettings.config" "${TargetDir}"
经过一些实验,Xamarin Studio/MonoDevelop:
- 将整个自定义命令用双引号括起来,并且
- 包括试图"不当"处理你的逻辑,包括额外的双引号。(我尝试了一种注入技术来撤消引用。)
这会产生使内部shell命令不可执行的副作用,因为copy
变成了"copy"
,这不是一个有效的命令。它还解释了为什么将所有内容移动到批处理文件也解决了这个问题——现在有一个物理文件(它是一个物理路径)要执行。