Ошибка сборки только в командной строке

Я пытаюсь диагностировать ошибку в нашей сборке. Ошибка не возникает на нашем сервере сборки или на многих наших машинах разработки, но постоянно возникает на моем компьютере и некоторых других. Я могу собрать проект из VS2010 без ошибок. Если я использую эту команду в консоли:

devenv Solution.sln /Build debug

Я получаю следующий вывод:

------ Build started: Project: Solution, Configuration: Debug Any CPU ------
  Solution -> [Path]\Solution.dll
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

Иногда (по-видимому, случайно) в этот момент я получаю всплывающее окно VS с просьбой проверить решение в Интернете, закрыть или отладить. Отладка дает мне:

Unhandled exception at 0x596e29a8 in devenv.exe: 0xC0000005: Access violation reading location 0x02c58bf0.
csproj.dll!596e29a8()    
[Frames below may be incorrect and/or missing, no symbols loaded for csproj.dll]    
csproj.dll!596e2a00()    
csproj.dll!596f089a()    
oleaut32.dll!7524f786()    
oleaut32.dll!7524d398()    
rpcrt4.dll!75670966()    
rpcrt4.dll!755f4184()    
rpcrt4.dll!755f413d()    
ole32.dll!757bb1cf()    
ole32.dll!757baf19()    
ole32.dll!757bb30f()    
ole32.dll!757a55b0()    
KernelBase.dll!75580ce7()    
oleaut32.dll!75244a3e()    
oleaut32.dll!7524e40a()    
oleaut32.dll!7524e4ef()    
oleaut32.dll!7524e50d()    
ole32.dll!758aadea()    
ole32.dll!758adccd()    
ole32.dll!758adb41()    
ole32.dll!758ae1fd()    
ole32.dll!757c9367()    
ole32.dll!757c9326()    
user32.dll!75d562fa()    
user32.dll!75d56d3a()    
user32.dll!75d56ce9()    
user32.dll!75d56d91()    
user32.dll!75d577c4()    
user32.dll!75d5788a()    
ole32.dll!7578d03c()    
ole32.dll!7578d22c()    
clr.dll!6d7da27d()    
clr.dll!6d7da209()    
clr.dll!6d80e9e7()    
clr.dll!6d80eaa8()    
clr.dll!6d7da462()    
WindowsBase.ni.dll!5f4bf07a()    
mscorlib.ni.dll!6ca9dc84()    
clr.dll!6d6721bb()    
clr.dll!6d6aa7aa()    
clr.dll!6d6aa94c()    
clr.dll!6d6aa981()    
clr.dll!6d7da1c3()    
clr.dll!6d6f4795()    
clr.dll!6d80eaa8()    
clr.dll!6d80eb27()    
clr.dll!6d69173e()    
clr.dll!6d767628()    
clr.dll!6d827019()    
mscorlib.ni.dll!6caa1953()    
mscorlib.ni.dll!6caa1953()    
Microsoft.VisualStudio.Platform.AppDomainManager.ni.dll!69d35a09()    
Microsoft.VisualStudio.Platform.AppDomainManager.ni.dll!69d35a09()    
Microsoft.VisualStudio.Platform.AppDomainManager.ni.dll!69d3c209()    
clr.dll!6d6725a1()    
clr.dll!6d76590b()    
clr.dll!6d7659e4()    
clr.dll!6d765a4a()    
clr.dll!6d765baf()    
004fa1e2()  
msenv.dll!6282e820()    
msenv.dll!6282e820()    
msenv.dll!6282ec04()    
msenv.dll!6282ec81()    
msenv.dll!627615e7()    
msenv.dll!6280e188()    
devenv.exe!2fac0637()    
devenv.exe!2fac0fd4()    
kernel32.dll!75c0520b()    
msvcr100.dll!_onexit(int (void)* func)
msvcr100.dll!__set_flsgetvalue()
devenv.exe!2fac20d8()    
devenv.exe!2fac2148()    
kernel32.dll!75c033aa()    
ntdll.dll!773d9ef2()    
ntdll.dll!773d9ec5()    

Даже когда возникает ошибка, файлы dll и pdb уже находятся в выходной папке, и все выглядит правильно. Есть несколько ссылок с CopyLocal, для которых установлено значение true, и эти файлы также всегда присутствуют в выходной папке. Никто не видел никаких ошибок во время выполнения и ни у кого не возникало проблем при использовании двоичных файлов, независимо от того, возникает ли ошибка. Ошибка также раздражает, потому что она приостанавливает скрипт сборки, поэтому нам нужно закрыть окно с ошибкой, чтобы продолжить.

Я хотел бы определить причину ошибки или, по крайней мере, найти способ автоматически закрыть/не показывать всплывающее окно и позволить сценарию продолжить работу.

Изменить:

По совету Дейва я попробовал MSBuild, и он компилируется без ошибок. Это решает проблему для меня.


person DSway    schedule 30.07.2013    source источник
comment
Может ли ваша VS работать с повышенными разрешениями, но приглашение cmd выполняется без? (Хотя кажется, что к DLL обращаются только с неправильным/недопустимым смещением)   -  person Brad Christie    schedule 30.07.2013
comment
Это похоже на внутреннюю проблему VS (а не на то, что вы делаете неправильно). Я бы попробовал ремонт на VS.   -  person 500 - Internal Server Error    schedule 30.07.2013
comment
Почему бы не использовать командную строку MSBuild для сборки?   -  person DaveShaw    schedule 30.07.2013
comment
@Brad - Командная строка работает от имени администратора.   -  person DSway    schedule 30.07.2013
comment
@Dave - мы используем MSBuild для большинства других решений. Я попробую.   -  person DSway    schedule 30.07.2013
comment
После перехода на MSBuild я дюжину раз скомпилировал отдельное решение и дважды запустил полный скрипт и не увидел ошибки. Все еще нужно убедиться, что это работает для всех остальных, но похоже, что переход на MSBuild решит проблему. Спасибо, Дэйв.   -  person DSway    schedule 30.07.2013


Ответы (1)


Создание проекта с использованием MSBuild решило эту проблему. Я не смог понять, почему мы иногда видим ошибку на некоторых машинах, но с тех пор, как я изменил наш сценарий, чтобы использовать MSBuild для этого проекта, никто не видел эту ошибку. Еще раз спасибо, Дэйв.

person DSway    schedule 15.08.2013