2015-12-08 2 views
0

У меня есть сценарий сборки, который начинается в Visual Studio из командной строки следующим образом:Visual Studio 2015 код выхода 0xE0434352

devenv.exe <project file> /Rebuild "Release" /Project <project name> /UseEnv /Out <log file> 

По завершении скрипт проверяет код выхода из Visual Studio.

Мы обновили с Visual Studio 2010 до 2015 года. Большинство проектов скомпилированы без проблем, но некоторые выходят с кодом 0xE0434352, который, я считаю, является System.InvalidOperationException.

Журнал событий окна показывает две записи:

Faulting application name: devenv.exe, version: 14.0.24720.0, time stamp: 0x564ea97e 
Faulting module name: KERNELBASE.dll, version: 6.1.7601.19045, time stamp: 0x56258f05 
Exception code: 0xe0434352 
Fault offset: 0x0000c42d 
Faulting process id: 0xb64 
Faulting application start time: 0x01d131c68bdc0db0 
Faulting application path: c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\devenv.exe 
Faulting module path: C:\Windows\syswow64\KERNELBASE.dll 
Report Id: cb600c61-9db9-11e5-abfc-005056c00008 

и

Application: devenv.exe 
Framework Version: v4.0.30319 
Description: The process was terminated due to an unhandled exception. 
Exception Info: System.InvalidOperationException 
    at System.Windows.Forms.Control.MarshaledInvoke(System.Windows.Forms.Control, System.Delegate, System.Object[], Boolean) 
    at System.Windows.Forms.Control.BeginInvoke(System.Delegate, System.Object[]) 
    at System.Windows.Forms.WindowsFormsSynchronizationContext.Post(System.Threading.SendOrPostCallback, System.Object) 
    at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.PostAction(System.Object) 
    at System.Threading.Tasks.AwaitTaskContinuation.RunCallback(System.Threading.ContextCallback, System.Object, System.Threading.Tasks.Task ByRef) 
    at System.Threading.Tasks.AwaitTaskContinuation+<>c.<ThrowAsyncIfNecessary>b__18_0(System.Object) 
    at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(System.Object) 
    at System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, System.Object, Boolean) 
    at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
    at System.Threading.ThreadPoolWorkQueue.Dispatch() 
    at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 

Эти проекты VB и C# Windows Forms проекты. Это не происходит с проектами на C++.

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

Может кто-нибудь предложить, как исправить эту проблему?

+1

0xE0434352 - код исключения для управляемых исключений, может быть любым. Эта трассировка стека * очень * общая, может быть ничего, кроме надстроек, всегда находится в верхней части списка. Вместо этого вы должны использовать msbuild.exe. –

+0

Спасибо @HansPassant. Есть ли удобный способ создания проекта визуальной студии в заданной конфигурации с использованием MSBuild? –

+1

захватить свалку аварии. запустите ** procdump -ma i C: \ localdumps **, чтобы зарегистрировать procdump (https://technet.microsoft.com/en-us/sysinternals/dd996900.aspx) как отладчик post mortem. Когда вы получаете новый сбой, dmp записывается в C: \ localdumps. Откройте этот dmp с помощью Windbg (часть инструментов отладки из SDK Windows: https://dev.windows.com/en-us/downloads/windows-10-sdk) и запустите **! Anal -v **. Возможно, это поможет вам. – magicandre1981

ответ

1

Если это все нормальные проекты, которые вы строите, вам не нужно devenv для выполнения этой работы для вас.

Просто используйте msbuild.

Я думаю, что это командная строка поможет вам начать:

msbuild /t:Build /p:Configuration=Release [your .sln or .csproj or .vbproj] 

который инструктирует MSBuild для обработки Build цели и установить Property с именем конфигурации освободить

Обратите внимание, как вы можете MsBuild полного решения или это единственный проект. Единственное исключение - для типов проектов, которые известны только Visual Studio, а не для msbuild. Для более ранних версий VS это было верно для типа проекта Setup. Вы не могли бы построить этот, не запуская devenv.

+0

Это сложнее, чем кажется. Я обнаружил, что должен также указать платформу в командной строке, которая не была необходима с помощью команды DevEnv. Раньше сценарий сборки не имел этой информации, что требовало некоторой работы по исправлению.Большинство наших проектов не используют проектные зависимости, которые могут быть или не быть хорошими. Несколько проектов, которые вызвали проблемы, даже когда я использовал BuildProjectReferences = false. В конце концов я заменил их ссылками DLL. Я все еще считаю, что MSBuild может быть трудно понять. –