繁体   English   中英

启动ASP.NET 5(MVC 6)Web应用程序时出现AmbiguousMatchException

[英]AmbiguousMatchException when starting ASP.NET 5 (MVC 6) Web Application

几个小时以来,我一直在努力将自己的头缠住,直到几乎要放弃。

我曾尝试搜索(谷歌和谷歌搜索引擎搜索),但似乎没有人遇到这个问题(并发布了它)。

我的问题如下:
我有一个简单的ASP.NET 5 MVC 6应用程序; 目前,它绝对不执行任何操作(按代码进行)。

之前我遇到了几个问题,但设法解决了这个问题。

这个问题决定坚持一段时间。

启动应用程序(通过调试或使用"k web" / "k kestrel"命令),出现以下异常:

System.Reflection.AmbiguousMatchException: Ambiguous match found.
   at System.RuntimeType.GetMethodImpl(String name, BindingFlags bindingAttr, Binder binder, CallingConventions callConv, Type[] types, ParameterModifier[] modifiers)
   at System.Type.GetMethod(String name, BindingFlags bindingAttr)
   at System.Reflection.TypeInfo.GetDeclaredMethod(String name)
   at Microsoft.AspNet.Hosting.Startup.StartupLoader.FindMethod(Type startupType, String methodName, String environmentName, Type returnType, Boolean  required)
   at Microsoft.AspNet.Hosting.Startup.StartupLoader.LoadStartup(String applicationName, String environmentName, IList`1 diagnosticMessages)
   at Microsoft.AspNet.Hosting.Startup.StartupManager.LoadStartup(String applicationName, String environmentName)
   at Microsoft.AspNet.Hosting.HostingEngine.EnsureApplicationStartup(HostingContext context)
   at Microsoft.AspNet.Hosting.HostingEngine.EnsureApplicationDelegate(HostingContext context)
   at Microsoft.AspNet.Hosting.HostingEngine.Start(HostingContext context)
   at Microsoft.AspNet.Hosting.Program.Main(String[] args)

我的config.json:

{
    "webroot": "httpdocs",
    "version": "1.0.0-beta3",
    "exclude": [
        "httpdocs"
    ],
    "packExclude": [
        "**.kproj",
        "**.user",
        "**.vspscc"
    ],
    "dependencies": {
        // ASP.NET:
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta3",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta3",
        "Microsoft.AspNet.Mvc": "6.0.0-beta3",
        "Microsoft.AspNet.Mvc.Razor": "6.0.0-beta3",
        "Microsoft.AspNet.Diagnostics": "1.0.0-beta3",
        "Microsoft.AspNet.StaticFiles": "1.0.0-beta3",

        // "Microsoft.Framework"
        "Microsoft.Framework.ConfigurationModel.Json": "1.0.0-beta3",
        "Microsoft.Framework.DependencyInjection": "1.0.0-beta3",
        "Microsoft.Framework.Logging": "1.0.0-beta3",
        "Microsoft.Framework.Logging.Console": "1.0.0-beta3",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta3"

        //"System.Net.Http": "4.0.0-beta-22416",
        //"mongocsharpdriver": "1.10.0"
    },
    "commands": {
        "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
        "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5002"
    },
    "frameworks": {
        "aspnet50": { }
    }
}

我的Startup.cs(基本上是示例中的标准):

using System;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.Framework.ConfigurationModel;
using Microsoft.Framework.DependencyInjection;
using Microsoft.Framework.Logging;
using Microsoft.Framework.Logging.Console;
using Microsoft.AspNet.Diagnostics;

namespace MausSite
{
    public class Startup
    {
        public IConfiguration Configuration { get; private set; }

        public Startup(IHostingEnvironment env)
        {
            Configuration = new Configuration()
                .AddJsonFile("config.json")
                .AddEnvironmentVariables();
        }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc();
        }

        public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerfactory)
        {
            loggerfactory.AddConsole();

            // Add the following to the request pipeline only in development environment.
            if (String.Equals(env.EnvironmentName, "development", StringComparison.OrdinalIgnoreCase))
            {
                app.UseBrowserLink();
                app.UseErrorPage(ErrorPageOptions.ShowAll);
            }
            else
            {
                // Add Error handling middleware which catches all application specific errors and
                // send the request to the following path or controller action.
                app.UseErrorHandler("/Home/Error");
            }

            app.UseStaticFiles();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller}/{action}/{id?}",
                    defaults: new { controller = "Home", action = "Index" });
            });
        }

        public void Configure(IApplicationBuilder app)
        {
            // For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
        }
    }
}

我基本上已经注释掉了所有代码,以确保不是引起异常的原因(考虑到堆栈跟踪,这似乎也不可能)。

有人遇到过类似问题吗?
欢迎所有想法!

编辑:我正在使用"klr-clr-win-x86 1.0.0-beta3" / "klr-clr-win-x64 1.0.0-beta3"
该错误在两个方面均持续存在。
也更新了我的project.json。

找到了问题。 它被隐藏在文件底部: Configure方法。

删除第二个( Configure(IApplicationBuilder app) ),一切正常。 我们不支持Configure重载。 启动类只能有一个公共的Configure方法。


先前的答案:

  1. 在这里一样project.jsonframeworks部分中至少添加一个框架。 由于您正在使用mongocsharpdriver ,因此只需要aspnet50因为没有用于CoreCLR的Mongo驱动程序。
  2. 删除System.Net.Http 看起来您的代码似乎不需要它。

如果以上两点都不能解决问题,请告诉我们您使用的KLR版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM