作業中のプロジェクトから別のプロジェクトにコードを接合しようとしています。 「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();
ステートメントで更新しました。)
何か案は??
属性ルーティングは、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;
VedranMandićからのこのコメントは私のために問題を解決しました。回答(または少なくとも回答)にすべきだと思うので、ここに再投稿しています。
「更新パッケージMicrosoft.AspNet.WebApi.WebHost -reinstall」を実行しましたが、うまくいきました。面白いことに、これはTFSからさまざまなPCで最新バージョンを取得した後に発生します。これは、バージョン管理システムでnugetパッケージが適切に機能しないために起こると思います
私の場合、Web APIプロジェクトには参照を使用する2つがありました。
using System.Web.Http;
using System.Web.Mvc;
削除したらすぐにSystem.Web.Mvc
、エラーはなくなりました。
プロジェクトが複数のソリューション間で共有される場合、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>