2015-01-27 4 views
0

Я регистрирую динамические сборки при запуске приложения MVC5 с помощью BuildManager. Сборки собраны в памяти с использованием CodeDOM (CSharpCodeProvider) и не записываются на диск:BuildManager, бросающий спорадическое исключение при запуске приложения MVC

[assembly: WebActivatorEx.PreApplicationStartMethod(typeof(MyWebApp.MyStartup), "Start")] 
[assembly: WebActivatorEx.ApplicationShutdownMethodAttribute(typeof(MyWebApp.MyStartup), "Stop")] 

namespace MyWebApp 
{ 
    public static class MyStartup 
    { 
     public static void Start() 
     { 
      System.Reflection.Assembly[] assemblies = GetDynamicAssemblies(); 
      System.Array.ForEach(assemblies, a => System.Web.Compilation.BuildManager.AddReferencedAssembly(a)); 

     } 

     private static System.Reflection.Assembly[] GetDynamicAssemblies() 
     { 
      //create and return dynamic assemblies using Codedom here 
      return new System.Reflection.Assembly[] { }; 
     } 

     public static void Stop() 
     { 
      //do cleanup if needed 
     } 
    } 
} 

Моего Global.asax.cs является довольно стандартным:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Reflection; 
using System.Web; 
using System.Web.Http; 
using System.Web.Mvc; 
using System.Web.Optimization; 
using System.Web.Routing; 

namespace MyWebApp 
{ 
    public class MvcApplication : System.Web.HttpApplication 
    { 
     protected void Application_Start() 
     { 
      AreaRegistration.RegisterAllAreas(); 
      GlobalConfiguration.Configure(WebApiConfig.Register); 
      FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
      RouteConfig.RegisterRoutes(RouteTable.Routes); 
      BundleConfig.RegisterBundles(BundleTable.Bundles); 
     } 
    } 
} 

Я спорадический получаю следующее исключение на запуск и отладчик не врываются в какой-либо из моих пользовательских кодов. Что мне здесь не хватает?

[NullReferenceException: Object reference not set to an instance of an object.] 
    System.CodeDom.Compiler.CodeDomProvider.TryGetProbableCoreAssemblyFilePath(CompilerParameters parameters, String& coreAssemblyFilePath) +245 
    Microsoft.CSharp.CSharpCodeGenerator.CmdArgsFromParameters(CompilerParameters options) +149 
    Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) +366 
    Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch(CompilerParameters options, String[] fileNames) +160 
    System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile(CompilerParameters options, String[] fileNames) +23 
    System.Web.Compilation.AssemblyBuilder.Compile() +884 
    System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +9519768 
    System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp) +9929000 
    System.Web.Compilation.BuildManager.CompileGlobalAsax() +44 
    System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +269 

[HttpException (0x80004005): Object reference not set to an instance of an object.] 
    System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +62 
    System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +427 
    System.Web.Compilation.BuildManager.CallAppInitializeMethod() +31 
    System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +535 

[HttpException (0x80004005): Object reference not set to an instance of an object.] 
    System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +9930508 
    System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +101 
    System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +254 

Ниже приведены установленные пакеты NuGet для справки:

<?xml version="1.0" encoding="utf-8"?> 
<packages> 
    <package id="Antlr" version="3.4.1.9004" targetFramework="net45" /> 
    <package id="bootstrap" version="3.0.0" targetFramework="net45" /> 
    <package id="EntityFramework" version="6.1.1" targetFramework="net45" /> 
    <package id="jQuery" version="1.10.2" targetFramework="net45" /> 
    <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Cors" version="5.0.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Identity.Core" version="2.1.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Identity.EntityFramework" version="2.1.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Identity.Owin" version="2.1.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Mvc" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Razor" version="3.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.SignalR.Core" version="2.2.0" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Client" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.Core" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.2" targetFramework="net45" /> 
    <package id="Microsoft.AspNet.WebPages" version="3.2.2" targetFramework="net45" /> 
    <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.2" targetFramework="net45" /> 
    <package id="Microsoft.Owin" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Cors" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Host.SystemWeb" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.Cookies" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.Facebook" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.Google" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.MicrosoftAccount" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.OAuth" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Owin.Security.Twitter" version="3.0.0" targetFramework="net45" /> 
    <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" /> 
    <package id="Modernizr" version="2.6.2" targetFramework="net45" /> 
    <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net45" /> 
    <package id="Ninject" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Ninject.Extensions.Conventions" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Ninject.MVC5" version="3.2.1.0" targetFramework="net45" /> 
    <package id="Ninject.Web.Common" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Ninject.Web.Common.WebHost" version="3.2.0.0" targetFramework="net45" /> 
    <package id="Owin" version="1.0" targetFramework="net45" /> 
    <package id="Respond" version="1.2.0" targetFramework="net45" /> 
    <package id="WebActivatorEx" version="2.0" targetFramework="net45" /> 
    <package id="WebGrease" version="1.5.2" targetFramework="net45" /> 
</packages> 
+0

[Что такое 'NullReferenceException' и как его исправить?] (Http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) –

+0

Ya Я знаю, что такое NullRefExcepton! Мне нужна помощь в понимании поведения структуры, учитывая контекст, который я изложил выше! –

ответ

Смежные вопросы