2

サイトをWebAPIベータ版からWebAPIRCに移動しましたが、サイトの読み込み時にエラーが発生します。Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.

このエラーは、(ここAutoFacWebApiDependencyResolverの手順に従って)登録しようとしたときに初めて発生します。

var resolver = new AutofacWebApiDependencyResolver(IoCManager.Container);
GlobalConfiguration.Configuration.DependencyResolver = resolver;

スタックトレースは次のことを示しています。

[MissingMethodException: Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.]
   System.Web.Http.GlobalConfiguration.<.cctor>b__0() +0
   System.Lazy`1.CreateValue() +12775823
   System.Lazy`1.LazyInitValue() +355
   StatusBoard.Web.MvcApplication.RegisterDependencyInjection() in C:\path-tp-app\Global.asax.cs:125
   StatusBoard.Web.MvcApplication.Application_Start() in C:\path-to-app\Global.asax.cs:75

これに基づいて、静的GlobalConfigurationクラスの初期化中にエラーが発生しているようです。そのクラスのソースにドリルダウンすると、次のように表示されます。

private static Lazy<HttpConfiguration> _configuration = new Lazy<HttpConfiguration>((Func<HttpConfiguration>) (() =>
{
  local_0 = new HttpConfiguration((HttpRouteCollection) new HostedHttpRouteCollection(RouteTable.Routes));
  local_0.get_ServiceResolver().SetService(typeof (IBuildManager), (object) new WebHostBuildManager());
  return local_0;
}));
private static Lazy<HttpControllerDispatcher> _dispatcher = new Lazy<HttpControllerDispatcher>((Func<HttpControllerDispatcher>) (() => new HttpControllerDispatcher(GlobalConfiguration._configuration.Value)));

public static HttpConfiguration Configuration
{
  get
  {
    return GlobalConfiguration._configuration.Value;
  }
}

ここでの4行目は問題のようです-クラスに存在しなくなったget_ServiceResolver()メソッドを呼び出そうとしています(おそらく代わりに存在するHttpConfigurationはずです)。DependncyResolver

これは、RC for WebAPIの単なるバグですか?これを回避する方法はありますか?または、DLL / Nugetの地獄で立ち往生していますか(もしそうなら、どうすれば自分を解放できますか)?

4

2 に答える 2

1

必ず正しいnugetパッケージ(RC!)を含め、パッケージをビルドするマシンに新しいmvc4rcをインストールしてください。

于 2012-06-12T11:17:22.260 に答える
0

依存関係の解決はRCで完全に書き直されました。ベータ版DLLをアンインストールすると、問題が解決する可能性が高くなります。

Windowsの「プログラムのアンインストール」で「(バンドル)」のフラグが付いているものをアンインストールするだけです。

于 2012-06-12T10:30:40.647 に答える