ActivationManager Исключение во время процесса сборки? - PullRequest
21 голосов
/ 15 ноября 2011

Я получаю следующее исключение, когда строит проект веб-сайта в VS 2010:

The pre-application start initialization method Run on type WebActivator.ActivationManager  threw an exception with the following error message: Exception has been thrown by the target of an invocation..     

Как мне отладить это? Это происходит, когда я встраиваюсь в VS.NET и из командной строки (например, через NAnt / MSBuild).

Ответы [ 4 ]

23 голосов
/ 11 января 2012

Чтобы решить эту проблему, вам нужно предоставить аргумент -errorstack в aspnetcompiler.Затем, когда это не удается, вы получите не только трассировку стека исключений, которые вы видите сейчас, но и исключение InnerException, которое оно переносит.Например, вот вывод, когда ошибка сборки вызвана проблемой с загрузкой Кассеты dll:

    error ASPRUNTIME: The pre-application start initialization method Run on type We
bActivator.ActivationManager threw an exception with the following error message
: Exception has been thrown by the target of an invocation..

[TypeLoadException]: Could not load type 'Cassette.Configuration.ICassetteConfig
uration' from assembly 'Cassette, Version=0.8.1.0, Culture=neutral, PublicKeyTok
en=null'.
   at Cassette.Web.StartUp..cctor()

[TypeInitializationException]: The type initializer for 'Cassette.Web.StartUp' t
hrew an exception.
   at Cassette.Web.StartUp.PreApplicationStart()

[TargetInvocationException]: Exception has been thrown by the target of an invoc
ation.
   at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Ob
ject target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAt
tributes, RuntimeType typeOwner)
   at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Obj
ect target, Object[] arguments, Signature sig, MethodAttributes methodAttributes
, RuntimeType typeOwner)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invoke
Attr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisib
ilityChecks)
   at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invoke
Attr, Binder binder, Object[] parameters, CultureInfo culture)
   at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
   at WebActivator.BaseActivationMethodAttribute.InvokeMethod()
   at WebActivator.ActivationManager.RunActivationMethods[T]()
   at WebActivator.ActivationManager.RunPreStartMethods()
   at WebActivator.ActivationManager.Run()

[InvalidOperationException]: The pre-application start initialization method Run
 on type WebActivator.ActivationManager threw an exception with the following er
ror message: Exception has been thrown by the target of an invocation..
   at System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`
1 methods)
   at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
   at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appMan
ager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, Host
ingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception a
ppDomainCreationException)

[HttpException]: The pre-application start initialization method Run on type Web
Activator.ActivationManager threw an exception with the following error message:
 Exception has been thrown by the target of an invocation..
   at System.Web.Compilation.ClientBuildManager.EnsureHostCreated()
   at System.Web.Compilation.ClientBuildManager.PrecompileApplication(ClientBuil
dManagerCallback callback, Boolean forceCleanBuild)
   at System.Web.Compilation.Precompiler.Main(String[] args)
5 голосов
/ 17 января 2012

Я бы хотел проголосовать за ответ Ксолтара, но это мой первый вклад в SO, поэтому у меня нет представителя!

У меня была очень похожая проблема на нашем сервере сборки (TeamCity), вот фрагмент из журнала сборки:

[00:10:39]: (MvcBuildViews target) -> 
[00:10:39]:   error ASPRUNTIME : The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message: Exception has been thrown by the target of an invocation.. [C:\TeamCity\buildAgent\work\1ee8c94c32e676ad\source\Project.Site\Project.Site.csproj]
[00:10:39]:     0 Warning(s)
[00:10:39]:     1 Error(s)
[00:10:39]: Time Elapsed 00:00:27.93

Чтобы диагностировать проблему, я запустил ASPNET_COMPILER , используя аргумент -errorstack против значения MSBUILD создан для сайта.В этом случае:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>aspnet_compiler -p "C:\TeamCity\buildAgent\work\1ee8c94c32e676ad\source\Project.Site" -v anything -errorstack

Utility to precompile an ASP.NET application
Copyright (C) Microsoft Corporation. All rights reserved.

error ASPRUNTIME: The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message : Exception has been thrown by the target of an invocation..

[FileNotFoundException]: Could not load file or assembly 'msshrtmi, Version=1.6.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment()
   at Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor()

error ASPRUNTIME: The pre-application start initialization method Run on type WebActivator.ActivationManager threw an exception with the following error message : Exception has been thrown by the target of an invocation..

В моем случае причиной проблемы была зависимость от одной из сборок Azure (которая не была установлена ​​на сервере сборки).

2 голосов
/ 16 декабря 2011

Увеличьте уровень детализации задачи или командной строки msbuild для получения более подробных сообщений об ошибках.

Например, используйте /verbosity:detailed.

См. http://msdn.microsoft.com/en-us/library/ms164311.aspx

Вы используете Ninject?
Если это так, посмотрите это: http://groups.google.com/group/ninject/browse_thread/thread/1934e9260ba07ecd?pli=1 и это: http://www.techques.com/question/1-6173194/Strange-behaviour-when-using-Ninject-to-resolve-a-service-within-a-controller-factory

Используете ли вы RavenDB?
Если это так, посмотрите это: http://groups.google.com/group/ravendb/browse_thread/thread/437738caf4760ce1/b7e92fd6cfeaaa17?#b7e92fd6cfeaaa17

1 голос
/ 23 февраля 2012

В моем случае я видел сообщение [AspNetCompiler] error ASPRUNTIME error message: Value cannot be null. в TeamCity.

В полных журналах сборки более полезное сообщение внизу было:

error ASPRUNTIME : The pre-application start initialization method InitializePreStart on type MyApplication.MvcApplication threw an exception with the following error message: Value cannot be null.

Как оказалось, у меня возникла исключительная ситуация с помощью метода, который я определил с помощью PreApplicationStartMethod:

[assembly: System.Web.PreApplicationStartMethod(typeof(MyApp.MvcApplication), "InitializePreStart")]

namespace PrintFleet.PFE.RestService
{
    public class MvcApplication : System.Web.HttpApplication
    {
        //....
        public static void InitializePreStart()
        {
            // exception thrown here
        }
    }
}

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

Я обернул все это в try..catch, который регистрирует фатальное сообщение (которое в моем приложении идет как в файл журнала, так и в журнал событий Windows). В сборках мне все равно, если он потерпит неудачу, так как ему ничего не нужно делать. В реальных установках, если настройки отсутствуют, приложение не будет работать (и поэтому журнал объясняет почему).


Теперь, по-видимому, проблема в активаторе веб-страниц. Я не удивлюсь, если в папке App_Start есть метод, использующий webactivor, который выдает ошибку, из-за которой создается впечатление, что она исходит из WebActivator. Сначала проверьте, заверните вещи в try..catch, если это необходимо. Также возможно, что есть ошибка в самом вебактиваторе.


Итак, поскольку я наткнулся на этот пост при исследовании проблемы, надеюсь, эта информация будет полезна по крайней мере кому-то еще.

TL; DR: проекты веб-развертывания запускают методы ApplicationPreStart при компиляции. Убедитесь, что у вас есть блоки try..catch вокруг любого кода, выполняемого в предстартовый период, или вы можете иначе обработать ситуацию, когда код выполняется во время компиляции на ваших серверах сборки вне среды IIS / хостинга.

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