代码之家  ›  专栏  ›  技术社区  ›  tRuEsAtM

将asp.net核心应用程序部署到azure应用程序服务时出错

  •  1
  • tRuEsAtM  · 技术社区  · 7 年前

    下面是错误,

        Application startup exception: System.Collections.Generic.KeyNotFoundException: The given key was not present in the dictionary.
           at System.Collections.Generic.Dictionary`2.get_Item(TKey key)
           at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
           at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
           at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.ComputeClassification(String dependency)
           at Microsoft.AspNetCore.Mvc.Internal.DefaultAssemblyPartDiscoveryProvider.CandidateResolver.<GetCandidates>d__4.MoveNext()
           at System.Linq.Enumerable.<SelectManyIterator>d__17`2.MoveNext()
           at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
           at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services)
           at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)
           at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddMvc(IServiceCollection services)
           at LeapfrogDataService.Startup.ConfigureServices(IServiceCollection services)
        --- End of stack trace from previous location where exception was thrown ---
           at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
           at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.ConfigureServices(IServiceCollection services)
           at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
           at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
    

    我的program.cs看起来像,

        using System.IO;
        using Microsoft.AspNetCore.Hosting;
    
        namespace LeapfrogDataService
        {
            /// <summary>
            /// 
            /// </summary>
            public class Program
            {
                /// <summary>
                /// 
                /// </summary>
                /// <param name="args"></param>
                public static void Main(string[] args)
                {
                    var host = new WebHostBuilder()
                        .UseKestrel()
                        .UseContentRoot(Directory.GetCurrentDirectory())
                        .UseIISIntegration()
                        .UseStartup<Startup>()
                        .Build();
    
                    host.Run();
                }
            }
        }
    

    和Stututu.CS看起来像,

    using System.IO;
    using Microsoft.AspNetCore.Builder;
    using Microsoft.AspNetCore.Hosting;
    using Microsoft.AspNetCore.Mvc;
    using Microsoft.AspNetCore.Rewrite;
    using Microsoft.Extensions.Configuration;
    using Microsoft.Extensions.DependencyInjection;
    using Microsoft.Extensions.Logging;
    using Microsoft.Extensions.PlatformAbstractions;
    using Swashbuckle.AspNetCore.Swagger;
    
    namespace LeapfrogDataService
    {
        /// <summary>
        /// 
        /// </summary>
        public class Startup
        {
            /// <summary>
            /// 
            /// </summary>
            /// <param name="env"></param>
            public Startup(IHostingEnvironment env)
            {
                var builder = new ConfigurationBuilder()
                    .SetBasePath(env.ContentRootPath)
                    .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
                    .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
    
                if (env.IsEnvironment("Development"))
                {
                    // This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
                    builder.AddApplicationInsightsSettings(developerMode: true);
                }
    
                builder.AddEnvironmentVariables();
                Configuration = builder.Build();
            }
    
            /// <summary>
            /// 
            /// </summary>
            public IConfigurationRoot Configuration { get; }
    
            /// <summary>
            /// This method gets called by the runtime. Use this method to add services to the container
            /// </summary>
            /// <param name="services"></param>
            public void ConfigureServices(IServiceCollection services)
            {
                // Add framework services.
                services.AddApplicationInsightsTelemetry(Configuration);
    
                services.AddMvc();
    
                services.Configure<MvcOptions>(options =>
                {
                    options.Filters.Add(new RequireHttpsAttribute());
                });
    
                // Register the Swagger generator, defining one or more Swagger documents
                services.AddSwaggerGen(c =>
                {
                    c.SwaggerDoc("v1", new Info { Title = "Leapfrog API", Version = "v1" });
                    var filePath = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, "LeapfrogDataService.xml");
                    c.IncludeXmlComments(filePath);
                });
    
            }
            /// <summary>
            /// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
            /// </summary>
            /// <param name="app"></param>
            /// <param name="env"></param>
            /// <param name="loggerFactory"></param>
            public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
            {
                loggerFactory.AddConsole(Configuration.GetSection("Logging"));
                loggerFactory.AddDebug();
    
                app.UseMvc();
    
                var options = new RewriteOptions()
                    .AddRedirectToHttps();
    
                app.UseRewriter(options);
    
                // Enable middleware to serve generated Swagger as a JSON endpoint.
                app.UseSwagger();
    
                // Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint.
                app.UseSwaggerUI(c =>
                {
                    c.SwaggerEndpoint("/swagger/v1/swagger.json", "Leapfrog API V1");
                });
            }
        }
    }
    

    有人能帮助解决这个错误吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   tRuEsAtM    7 年前

    解决方法是,

    我在中添加了以下行 Startup.cs 在里面 ConfigureServices 方法。

    // Configuring application part for MVC
    var assembly = typeof(Startup).GetTypeInfo().Assembly;
    var part = new AssemblyPart(assembly);
    services.AddMvc().ConfigureApplicationPartManager(apm => apm.ApplicationParts.Add(part));
    

    而且,还更新了与我的项目相关的每个nuget包,不知道这是否真的有帮助,但我还是做到了。