Создание каталога в пользовательской команде после того, как Monodevelop создаст проект в Windows XP

Я разрабатываю проект с использованием Monodevelop 4 в Windows XP, и мне нужно скопировать некоторые файлы библиотеки .dll в какую-то папку после их сборки. Эти библиотеки являются плагинами к основному проекту, поэтому основной проект не зависит от них, и их необходимо копировать вручную.

Но поскольку мы используем компьютеры, ничего не нужно делать вручную, поэтому я обратился к Custom Commands Monodevelop в настройках проекта. Там я могу ввести любую команду, которая мне нравится (предположительно).

Итак, вот что я сделал; Сначала я добавил команду, чтобы убедиться, что папка назначения существует:

mkdir "${SolutionDir}\MainProj\bin\${ProjectConfigName}\Plugins"

А затем скопировал библиотеку:

xcopy "${TargetFile}" "${SolutionDir}\MainProj\bin\${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:\Some\Path\MainProj\bin\Debug\Plugins", что правильно, и когда я вставляю его в консоль, папка успешно создается, поэтому я понятия не имею, почему Monodevelop не может ее выполнить!

Есть ли у кого-нибудь комментарий по этой проблеме?


person Mehran    schedule 25.08.2013    source источник
comment
Не могу воспроизвести. У меня нет машины с XP. А как насчет маленького хака? Создайте каталог с именем Plugins в своем основном проекте. Поместите в него произвольный текстовый файл (README.txt) -> щелкните правой кнопкой мыши по файлу -> быстрые свойства -> скопируйте в выходной каталог. Это создаст каталог с именем Plugins в вашем целевом каталоге.   -  person x2bool    schedule 26.08.2013
comment
Спасибо за ваше предложение, но мне удалось решить проблему с помощью пакетного файла. Я опубликую это как ответ.   -  person Mehran    schedule 27.08.2013


Ответы (2)


Я сам нашел решение. Я создал файл batch с командой mkdir и назвал его в файле проекта Custom Commands.

person Mehran    schedule 27.08.2013

Мне удалось решить эту проблему в Xamarin Studio (версия 4.2.5), используя xcopy вместо copy и указав полный путь к xcopy.exe:

"%systemroot%\system32\xcopy.EXE" /y "${ProjectDir}\myAppSettings.config" "${TargetDir}"

После некоторых экспериментов оказалось, что Xamarin Studio/MonoDevelop:

  1. Заключает всю пользовательскую команду в двойные кавычки и
  2. Включает в себя логику, позволяющую «неправильно» обращаться с вами, включая дополнительные двойные кавычки. (Я попробовал метод инъекции, чтобы отменить цитату.)

Побочным эффектом этого является отображение команд внутренней оболочки неисполняемый - потому что copy становится "copy", что не является допустимой командой. И это объясняет, почему перемещение всего в пакетный файл также решает проблему — теперь есть физический файл (физический путь) для выполнения.

person Shawn South    schedule 11.05.2014