启动时出现 AmbiguousMatchException ASP.NET 5 (MVC 6) Web 应用程序
AmbiguousMatchException when starting ASP.NET 5 (MVC 6) Web Application
几个小时以来我一直在努力思考这个问题,几乎到了放弃的地步。
我已经尝试搜索(google 和 SO),但似乎没有人遇到过这个问题(并发布了相关信息)。
我的问题如下:
我有一个简单的 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
的重载。启动 class 只能有一个 public Configure
方法。
上一个回答:
- 至少向
project.json
中的 frameworks
部分添加一个框架,例如 here。由于您使用的是 mongocsharpdriver
,因此您只需要 aspnet50
,因为没有 Mongo CoreCLR 驱动程序。
- 删除
System.Net.Http
。您的代码似乎不需要它。
如果以上两点不能解决问题,请告诉我们您使用的是什么 KLR 版本。
几个小时以来我一直在努力思考这个问题,几乎到了放弃的地步。
我已经尝试搜索(google 和 SO),但似乎没有人遇到过这个问题(并发布了相关信息)。
我的问题如下:
我有一个简单的 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
的重载。启动 class 只能有一个 public Configure
方法。
上一个回答:
- 至少向
project.json
中的frameworks
部分添加一个框架,例如 here。由于您使用的是mongocsharpdriver
,因此您只需要aspnet50
,因为没有 Mongo CoreCLR 驱动程序。 - 删除
System.Net.Http
。您的代码似乎不需要它。
如果以上两点不能解决问题,请告诉我们您使用的是什么 KLR 版本。