在使用Castle Windsor的Azure Web Role中,通用语言运行时检测到一个无效程序。

4

我有一个网络角色,在我的开发电脑上运行得非常完美(使用VS2013和Window 8.1企业版x64),但当我将其发布到Azure时,会出现以下异常:

[InvalidProgramException: Common Language Runtime detected an invalid program.]
   Castle.Core.ComponentModel.get_Dependencies() +0
   Castle.Core.ComponentModel.AddConstructor(ConstructorCandidate constructor) +264
   Castle.MicroKernel.ModelBuilder.Inspectors.ConstructorDependenciesModelInspector.ProcessModel(IKernel kernel, ComponentModel model) +535
   Castle.MicroKernel.ModelBuilder.<>c__DisplayClass6.<BuildModel>b__4(IContributeComponentModelConstruction c) +137
   System.Collections.Generic.List`1.ForEach(Action`1 action) +95
   Castle.MicroKernel.ModelBuilder.DefaultComponentModelBuilder.BuildModel(IComponentModelDescriptor[] customContributors) +404
   Castle.MicroKernel.Registration.ComponentRegistration`1.Castle.MicroKernel.Registration.IRegistration.Register(IKernelInternal kernel) +283
   Castle.MicroKernel.DefaultKernel.Register(IRegistration[] registrations) +198
   Castle.Facilities.TypedFactory.TypedFactoryFacility.InitFacility() +745
   Castle.Facilities.TypedFactory.TypedFactoryFacility.Init() +78
   Castle.MicroKernel.Facilities.AbstractFacility.Castle.MicroKernel.IFacility.Init(IKernel kernel, IConfiguration facilityConfig) +165
   Castle.MicroKernel.DefaultKernel.AddFacility(String key, IFacility facility) +507
   Castle.MicroKernel.DefaultKernel.AddFacility(IFacility facility) +213
   Castle.MicroKernel.DefaultKernel.AddFacility() +167
   Castle.Windsor.WindsorContainer.AddFacility() +138
   PingTree.Journey.WebRole.IoCConfig.RegisterComponents() in d:\Users\Ben\OneDrive\Source\PingTree\JourneyWebRole\PingTree.Journey.WebRole\App_Start\IoCConfig.cs:19
   PingTree.Journey.WebRole.MvcApplication.Application_Start() in d:\Users\Ben\OneDrive\Source\PingTree\JourneyWebRole\PingTree.Journey.WebRole\Global.asax.cs:15

[HttpException (0x80004005): Common Language Runtime detected an invalid program.]
   System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext context, HttpApplication app) +475
   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +214
   System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +203
   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +313
   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +250

[HttpException (0x80004005): Common Language Runtime detected an invalid program.]
   System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +452
   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +99
   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +1017

注册组件方法的代码如下:
public static void RegisterComponents()
{
    var assemblyPath = Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "bin");

    var windsorContainer = new WindsorContainer();
    windsorContainer.AddFacility<TypedFactoryFacility>();
    windsorContainer.Install(FromAssembly.InDirectory(new AssemblyFilter(assemblyPath)));
    windsorContainer.Register(Classes.FromThisAssembly().BasedOn<IController>().LifestyleTransient());

    ControllerBuilder.Current.SetControllerFactory(new WindsorControllerFactory(windsorContainer));
}

在 windsorContainer.AddFacility 方法调用时失败。

我已经尝试了通常的方法,使用 NuGet 从项目中删除 Castle.Windsor,删除本地副本并重新安装 Windsor。这里的另一个答案建议删除本地临时 ASP.Net 文件,我也尝试过。但每次发布时都会出现相同的问题。

更新1 我已经能够使用锅炉板 Azure Web 角色模板和以下代码重现问题

    protected void Application_Start()
    {
        var windsorContainer = new WindsorContainer();
        windsorContainer.AddFacility<TypedFactoryFacility>();
    }

有人在Azure上使用Castle Windsor 3.3而没有遇到问题吗?
3个回答

4
更具体的回答是,这似乎是IntelliTrace的问题。 那些引发"Invalid program exception"异常的部署,都启用了IntelliTrace。通过禁用IntelliTrace并重新部署解决方案,角色得以正确初始化和启动。

0

我们曾经遇到过同样的问题,而且我们也使用了Windsor Castle 3.3。我们也从Azure发布配置文件中删除了IntelliTrace,这个问题就神奇地解决了。


0

我仍然不确定是什么导致了InvalidProgramException异常。 但是,我通过删除Azure部署并创建一个全新的Visual Studio解决方案,并发布该解决方案来解决我的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接