Не удалось запустить MSBuild.exe. Нелегальные персонажи в пути - PullRequest
7 голосов
/ 28 марта 2012

Я пытаюсь построить проект в команде.Он выполнит проверку TFS и файлы будут локально на сервере сборки.Если я вручную запускаю команду сборки на сервере, она работает:

C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\msbuild.exe C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\myproj\myproj.csproj /t:build

В Teamcity у меня есть шаг сборки MSBuild:

Путь создания файла: Dev \ Dev \ project \myproj \ myproj.csproj "рабочая папка оставлена ​​пустойЯ создаю задачу построения командной строки и запускаю приведенную выше командную строку, она работает. Я не уверен, какие различия существуют между командной строкой и задачей msbuild в команде teammcity.

EDIT

Я пробовал несколько вариантов рабочего каталога:

Выходной путь в проекте установлен на .. \ Build \ Tools \ myproj \

Итак, я установил рабочий каталогв teamcity: Dev \ Dev \ project \ Build \ Tools \ myproj \

Это не помогло.

Вот точный вывод команды teamcity:

Starting: C:\TeamCity\buildAgent\plugins\dotnetPlugin\bin\JetBrains.BuildServer.MsBuildBootstrap.exe /workdir:C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\Build\Tools\myproj /msbuildPath:C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
in directory: C:\TeamCity\buildAgent\work\3446a5bd436eea87\Dev\Dev\project\Build\Tools\myproj


Failed to start MSBuild.exe. Illegal characters in path.
System.ArgumentException: Illegal characters in path.
   at System.IO.Path.CheckInvalidPathChars(String path)
   at System.IO.Path.IsPathRooted(String path)
   at JetBrains.TeamCity.Utils.FileUtil.MakeFullPath(String path, String workDir) in         c:\BuildAgent\work\c2314fd21f15dc97\src\Utils\src\FileUtil.cs:line 48
   at JetBrains.BuildServer.MSBuildBootstrap.RunArgs.get_ProjectFile() in     c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap\src\RunArgs.cs:line 156
   at     JetBrains.BuildServer.MSBuildBootstrap.Impl.MSBuildBootstrapFactory.Create(IClientRunArgs     args) in     c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap.Core\src\Impl\MSBuildBootstrapFact    ory.cs:line 29
   at JetBrains.BuildServer.MSBuildBootstrap.Program.Run(String[] _args) in     c:\BuildAgent\work\c2314fd21f15dc97\src\MSBuildBootstrap\src\Program.cs:line 67

Ответы [ 4 ]

1 голос
/ 06 октября 2014

В TeamCity, когда вы используете параметры для своего пути или части пути, легко вставить в папку и не заметить, что она имеет новую строку или возврат каретки в конце (как я нашел из мучительный опыт). Может отображаться в TeamCity в качестве значения параметра:

\ Folder1 \ NewlyPastedInFolder \ ExistingFolder \ BuildScripts

То, что выглядит как завернутое в слово значение, на самом деле является параметром с возвратом каретки в середине. Проверьте это, отредактировав его, и посмотрите, можете ли вы удалить символ, чтобы превратить его в однострочное значение.

1 голос
/ 20 апреля 2012

Попробуйте отредактировать конфигурацию сборки и удалите кавычки из опции Путь к файлу сборки .

Если у вас есть:

"Dev \ Dev \ Проект \ MYPROJ \ myproj.csproj"

Просто позвольте:

Dev \ Dev \ Проект \ MYPROJ \ myproj.csproj

Надеюсь, это поможет.

0 голосов
/ 29 марта 2018

Я столкнулся с этим сообщением об ошибке от TeamCity, и оказалось, что причиной является пробел в файле решения (файл решения, на который есть ссылки в шагах по сборке Visual Studio, содержит двойные кавычки, и это, похоже, не помогает.Возможно, это были те цитаты, которые взорвали его?).Я полагаю, что есть какой-то способ обработки символа пробела, но проще было просто переименовать файл решения без пробела, и это решило проблему.

0 голосов
/ 21 сентября 2012

Этот вопрос кажется очень похожим:

Что за недопустимый символ в этой строке?Я получаю MSBUILD: ошибка MSB3095

В дополнение к этому вопросу, посмотрите на:

Что такое файл dll.refresh в ASP.Net?

На этот вопрос интерес представляет этот ответ:

В проекте ASP.NET добавление ссылки на файл добавит файл .refresh в папку Bin.,Когда проект находится под контролем исходного кода, этот файл затем добавляется в исходный контроль.* .dll.refresh файлы, которые засоряют каталог bin.Каждый раз, когда вы добавляете внешнюю ссылку, рядом с ней вы найдете файл dll.refresh.Эти файлы dll.refresh являются исключением из правила, и они должны входить в систему контроля версий.Это единственный способ, которым ваш веб-проект узнает, где находятся его ссылки.

Если у вас нет этого в управлении исходным кодом, это может объяснить проблему, с которой вы сталкиваетесь.Похоже, что сообщение об ошибке может вводить в заблуждение, и это связано с тем, что ссылка не разрешается на компьютере сборки.

Что касается того, почему оно работает из командной строки, возможно ли, что при сборке изTeamCity это чистит выходной каталог перед сборкой?Если при запуске из командной строки двоичные файлы уже были выведены из частично неудачной сборки, на которую ссылаются как на ссылки на файлы, это будет успешно выполнено.

Чтобы определить, так ли это, - если вы делаете полностью чистую проверкуа затем запустите шаг MSBuild из командной строки, все еще успешно?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...