Monosdevelop在Windows XP中构建项目后,在自定义命令中创建目录



我正在Windows XP中使用Monodevelop 4开发一个项目,在构建完一些.dll库文件后,我需要将它们复制到某个文件夹中。这些库是主项目的插件,因此主项目不依赖于它们,需要手动复制它们。

但由于我们使用的是计算机,实际上没有什么需要手动完成的,所以我在项目设置中使用了Monodedevelop的Custom Commands。在那里,我可以输入任何我喜欢的命令(据说)。

以下是我所做的;首先,我添加了一个命令来确保目标文件夹存在:

mkdir "${SolutionDir}MainProjbin${ProjectConfigName}Plugins"

然后复制库:

xcopy "${TargetFile}" "${SolutionDir}MainProjbin${ProjectConfigName}Plugins" /Y

但问题是第一个命令失败了,所以第二个命令永远不会执行。为了查看第一个命令的结果,我选中了名为Run on external consolePause 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:

  1. 将整个自定义命令用双引号括起来,并且
  2. 包括试图"不当"处理你的逻辑,包括额外的双引号。(我尝试了一种注入技术来撤消引用。)

这会产生使内部shell命令不可执行的副作用,因为copy变成了"copy",这不是一个有效的命令。它还解释了为什么将所有内容移动到批处理文件也解决了这个问题——现在有一个物理文件(它是一个物理路径)要执行。

最新更新