Почему vbc искажает командную строку?

Следуя методике здесь, я использовал командную строку vbc для компиляции моего проекта. Я использовал это для компиляции проекта из командной строки, и он отлично работал несколько раз, когда я пробовал. Длина командной строки составляет около 25 000 символов, если это что-то значит.

Но сегодня, когда я запустил команду, я получил кучу ошибок, которые выглядят так:

vbc : Command line error BC2001 : file 'admin\TestShare.aspxvb' could not be found

Однако, когда я смотрю на фактическую командную строку для ссылки на этот файл, это правильно:

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Vbc.exe ... admin\TestShare.aspx.vb ...

Все остальные ошибки «файл не найден» аналогичны: он пропускает символы из имени файла (не только точки, но и текстовые символы), а затем говорит, что не может найти этот файл.

Что тут происходит?

Обновление: этот первый поврежденный файл находится прямо рядом с символом 8192 в командной строке, что предполагает, что проблема связана со слишком длинным путем для Windows. Но если это проблема, как я могу создать свое приложение из командной строки?


person Joshua Frank    schedule 26.12.2013    source источник
comment
По какой причине вы не можете использовать msbuild YourProject.proj из командной строки? немного короче ;-)   -  person Chris O    schedule 26.12.2013
comment
Сделаем дикую догадку: если вы получаете такие гигантские командные строки, то вы, должно быть, компилируете проекты, которые очень глубоко вложены во множество подкаталогов. Что-то идет не так, когда вы превышаете жесткий верхний предел длины имени файла winapi, 259 символов. Переместите свое решение ближе к корню.   -  person Hans Passant    schedule 26.12.2013
comment
@ChrisO: D'oh, потому что я не думал об этом. Каким-то образом я зациклился на подходе vbc, никогда не делал резервных копий и не думал о другом. Я попробовал msbuild, и он решил мою проблему. Если вы опубликуете свой комментарий в качестве ответа, я приму его.   -  person Joshua Frank    schedule 26.12.2013
comment
@HansPassant: основным источником длины являются имена файлов, но они, похоже, используют относительные пути, так что это не поможет. Но гигантские дорожки — это явно признак плохого подхода, и Крис О дал мне гораздо лучший способ. Спасибо вам обоим за ваш вклад.   -  person Joshua Frank    schedule 26.12.2013
comment
Я полностью предположил, что msbuild сгенерировал эту командную строку. Вы напечатали от руки? Ой.   -  person Hans Passant    schedule 26.12.2013
comment
О, нет, нет, нет. Это был глупый момент, но не настолько глупый. Я поднял командную строку из вывода сборки VS.   -  person Joshua Frank    schedule 26.12.2013


Ответы (1)


Если вам просто нужно выполнить сборку из командной строки, почему бы не использовать msbuild. вместо? Все, что нужно, это msbuild YourProject.proj, чтобы все заработало, и намного короче, чем подробный способ ;-) Запуск из командной строки VS.

person Chris O    schedule 26.12.2013