Исключение 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).
Ответы
Ответ 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/хостинга.