web-dev-qa-db-ja.com

「属性ルーティング」を使用して「タイプまたは名前空間名「ルート」が見つかりませんでした」

作業中のプロジェクトから別のプロジェクトにコードを接合しようとしています。 「from」プロジェクトは「attribute routing」を使用して、Web APIコントローラーモジュールに[Route(…)]ディレクティブを埋め込み、どのHTTPメッセージがどのサービスルーチンにルーティングされるべきかを示します。

「from」プロジェクトでは正常に動作しますが、「to」プロジェクトでは「タイプまたはネームスペース名「Route」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)」というビルドエラーが発生します。

本質的にすべてのusingステートメントを「from」プロジェクトから「to」プロジェクトにコピーしようとしましたが、明らかな効果はありません。 MSドキュメントのどれも、NuGetパッケージが必要であることを示唆していません(またはusingステートメントさえ)。両方のプロジェクトは、おそらくASP.NET MVC 4です。

(そして、はい、WebApiConfig.csをconfig.MapHttpAttributeRoutes();ステートメントで更新しました。)

何か案は??

12
Hot Licks

属性ルーティングは、ASP.NET MVC 5以降、およびASP.NET Web API 2にネイティブです。

ただし、 ASP.NET MVCの以前のバージョンおよびWeb APIで属性ルーティングを使用できるプロジェクト があります。このページを注意深くお読みください。

リンクされたページで見ることができるように、このプロジェクトはNuGetパッケージとして利用できるため、次のようにインストールできます。

  • Install-Package AttributeRouting(MVCの場合)
  • Install-Package AttributeRouting.WebApi(Web APIの場合)
  • Install-Package AttributeRouting.WebApi.Hosted(自己ホスト型Web APIの場合)

属性ルーティングの名前空間は、バージョンごと、MVCおよびWeb APIごとに異なることに注意してください。したがって、インストールされたパッケージに含まれている.dllを参照して適切な名前空間を見つけ、それに応じてusingを変更する必要があります。例えば:

using AttributeRouting.Web.Http;
19
JotaBe

VedranMandićからのこのコメントは私のために問題を解決しました。回答(または少なくとも回答)にすべきだと思うので、ここに再投稿しています。

「更新パッケージMicrosoft.AspNet.WebApi.WebHost -reinstall」を実行しましたが、うまくいきました。面白いことに、これはTFSからさまざまなPCで最新バージョンを取得した後に発生します。これは、バージョン管理システムでnugetパッケージが適切に機能しないために起こると思います

29
ClearCloud8

私の場合、Web APIプロジェクトには参照を使用する2つがありました。

using System.Web.Http;
using System.Web.Mvc; 

削除したらすぐにSystem.Web.Mvc、エラーはなくなりました。

5
Dipendu Paul

プロジェクトが複数のソリューション間で共有される場合、Nugetでダウンロードされたライブラリの参照は、ソリューション関連のパスで。csprojで手動で構成する必要があります。

たとえば、log4netは次のように構成する必要があります。

<Reference Include="log4net, Version=1.2.15.0, Culture=neutral, PublicKeyToken=669e0ddf0bb1aa2a, processorArchitecture=MSIL">
   <HintPath>$(SolutionDir)\packages\log4net.2.0.5\lib\net45-full\log4net.dll</HintPath>
   <Private>True</Private>
</Reference>
0
Panos Roditakis