.NET Core開発で project.json / .csproj に手動で参照追加する場合・・・
こんな事ないですか?また、初心者な人、悩む事ないですか?的な記事です。
プロジェクトへの「パッケージ参照(アセンブリ参照)追加」は、Visual Studio などの統合開発環境を使用しているとGUI操作のみで完了してしまいます。
しかし、CLIやVisual Studio Codeを使って開発をしている場合、project.json もしくは .csproj ファイルに手動で参照の追加を記述する必要があります。
【補足】project.json と .csproj
2016.11.23現在、.NET Coreではバージョンによってプロジェクトファイルの形式をproject.json形式としているバージョンとMSBuildの.csproj形式としているバージョンが混在しています。今後は .csproj 形式に統一(移行)すると見られます。
利用したいクラスのヘルプ及び名前空間を調べる
例えば「HttpClientクラス」を利用したい、と考えたと想定します。
(ブログ記事などをググって得られたコードスニペットからクラス名と使い方は分かったけれど、名前空間と実装アセンブリが省略されている、といったケースをここでは想定しています。)
HttpClientはその名前からも想像できますが、「HTTPリクエストの送信・HTTPレスポンスの受信」をプログラムで処理する事ができます。
まず、以下のURLに「.NET CoreのAPI reference」が公開されています。
https://docs.microsoft.com/ja-jp/dotnet/core/api/index
左上のテキストボックス(Filterと書かれたテキストボックス)に「HttpClient」と入力します。
続けて、フィルタリング結果の中から「HttpClient」をクリックします。
HttpClientが属する名前空間は以下の赤枠部分になります。
プログラム中では、これをusingしましょう。
同ページの一番下の部分までスクロールしてみます。
「Assembly」という項目があり、ここでは「System.Net.Http.dll」となっています。
つまり、HttpClientクラスは「System.Net.Http名前空間に属するクラスであり、System.Net.Http.dllアセンブリに実装されている」という事が分かりました。
nugetパッケージの調査
では次に、System.Net.Httpのnugetパッケージを調べます。
ブラウザで以下のURLにアクセスします。
これは、nugetのトップページになります。
ページ上部の「Search Packages」に「System.Net.Http」と入力しEnterキーをクリックします。
検索結果が表示され、一番上の項目が今回探していたものであると分かります。
対象のページに移動すると、対象のパッケージの最新バージョンのページが表示され、「対象パッケージが依存するフレームワークやアセンブリのバージョン」「同パッケージの過去のバージョン履歴一覧」が表示されます。
という事で、今回は2016/11/23現在の最新バージョンである 4.3.0 を利用することにします。
参照(依存)設定の記述(project.json形式の場合)
まず、project.jsonの例は以下になります。project.jsonの場合、dependencies項目への追記となります。
--- project.json --- ...省略 "dependencies": { "System.Net.Http": "4.3.0", }, ...省略
dependencies配下のキー項目が”パッケージ名”、値項目が”バージョン番号”となります。
参照(依存)設定の記述(.csproj形式の場合)
.csprojの例は以下になります。
--- .csproj --- <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" /> ...省略 <ItemGroup> <PackageReference Include="System.Net.Http"> <Version>4.3.0</Version> </PackageReference> </ItemGroup> ...省略 </Project>
PackageReference要素のInclude属性が”パッケージ名”、配下のVersionタグ値が”バージョン番号”となります。
バージョンを明記しない
また、参照(依存)の記述の際にバージョン番号部分を「*(ワイルドカード)」とすると、その時点での最新バージョンを参照する事を意味します。
project.json / .csprojの例は以下になります。
--- project.json --- ...省略 "dependencies": { "System.Net.Http": "*", }, ...省略
--- .csproj --- <Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" /> ...省略 <ItemGroup> <PackageReference Include="System.Net.Http"> <Version>*</Version> </PackageReference> </ItemGroup> ...省略 </Project>
プログラムを書く
project.json / .csprojを整えた上で dotnet restore する事で、以下の様な HttpClient を利用したプログラムのビルドが通る様になります。
using System; using System.Net.Http; using System.Threading.Tasks; class Program { static void Main(string[] args) { HttpTest().Wait();; Console.WriteLine("Hello World!"); } static async Task HttpTest() { using( HttpClient httpClient = new HttpClient() ) { var response = await httpClient.GetAsync("http://www.microsoft.com/"); var stringResponse = await response.Content.ReadAsStringAsync(); Console.WriteLine(stringResponse); } } }
おまけ - Entity Framework Core のAPI Referenceはこちらです
Entity Framework Core のAPI Referenceは以下になります。