3

最初の製品リリース Asp.NET WebApi が導入され、人々がリリース候補版からそれにアップグレードしていたときに、他の多くの人が抱えていたように見える問題に遭遇しています...

私は、ウェブに投稿されたすべての解決策を試してみましたが、運が悪かったのですが、今では状況をよりよく理解しており、問題を絞り込んだと思います.

具体的には、私のアプリ (ローカル IIS サーバーにデプロイされているか、開発サーバーで実行されているか) が古い System.Web.Http アセンブリを使用しているようです。

Application_Start() メソッドの 2 行目は例外で失敗します。

protected void Application_Start()
{
    AreaRegistration.RegisterAllAreas();

    **WebApiConfig.Register(GlobalConfiguration.Configuration);**
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);
}

テンプレートに含まれる WebApiConfig.cs ファイル/クラスから Register メソッドを呼び出します。

public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

config.Routes.MapHttpRoute() を呼び出すと、次の例外が発生します。

Method not found: 'System.Web.Http.Services.DependencyResolver System.Web.Http.HttpConfiguration.get_ServiceResolver()'.

Server stack trace: 
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()

Exception rethrown at [0]: 
at System.Web.Http.GlobalConfiguration.<.cctor>b__0()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at System.Web.Http.GlobalConfiguration.get_Configuration()
at MvcApplication2.WebApiApplication.Application_Start() 
in C:\Projects\TestArea\ASP_MVC\4\MvcApplication2\Global.asax.cs:line 21

これまでに行ったことは次のとおりです。

  • .NET のすべてのバージョンを再インストールする
  • System.Web.Http を GAC から削除する
  • プロジェクト参照が、OS の .NET アセンブリではなく、WebApi ディレクトリを指していることを確認してください。
  • プロジェクト参照が「ローカルにコピー」に設定されていることを確認しました
  • c:\windows\system32\inetsrv\ および c:\inetpub から IIS の一時ファイルを削除しました。
  • c:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe を実行しました
  • NuGet を介してすべての WebApi 関連パッケージを更新しました
  • IIS とサイトの停止と開始
  • 再起動しました

ServiceResolver メソッドは、通常の .NET System.Web.Http には存在せず、System.Web.Http の WebApi バージョンにのみ存在します。そのため、間違ったアセンブリを参照していると考えました。

他に何をすべきかわかりません。どんな助けでも大歓迎です。ありがとうございました。

4

1 に答える 1

1

サムス自身が答えを見つけたので、公式の答えとしてここに投稿します。

解決策は、ロードされているさまざまな DLL の出力ウィンドウを確認し、RC バージョンをまだ使用しているバージョンを探し、それらの場所を見つけて削除することだと思います。

彼の場合、RC が GAC にいくつかの DLL を明らかに追加したことが原因でした (MVC4 のリリース バージョンでは、これらはすべてビン デプロイされているため、これは行われなくなりました)。

于 2013-06-15T19:18:19.517 に答える