Подтвердить что ты не робот

Исключение ActivationManager во время процесса сборки?

Я получаю следующее исключение при создании проекта веб-сайта в 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).

4b9b3361

Ответ 1

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

    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)

Ответ 2

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

У меня была очень похожая проблема на нашем build-сервере (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 (которая не была установлена ​​на сервере сборки).

Ответ 3

Увеличьте уровень детализации задачи 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

Ответ 4

В моем случае я видел сообщение [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
        }
    }
}

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

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


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


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

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