📑
[.NET] NuGetパッケージでglobal usingの別名を公開する
背景
global using が登場しました。プロジェクト中のどこか1か所に書いておけば、それぞれのコードでいちいちusing System.Collections.Generic;
などと書かなくても使えるようになります。
しかしglobal usingの効力は定義したプロジェクト内に限られます。プロジェクト参照やNuGetパッケージとして公開する場面にて、このglobal usingを他へも波及させる方法を書き残します
方法
既にまとめて頂いている記事がありますのでご参照ください。
以下のような.propsファイルを作成してパッケージに含めるようにします。この.propsファイルにglobal usingの定義を書きます。
MyGreatLib.props
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Using Include="MyCompany.MyGreatLib" />
</ItemGroup>
</Project>
alias構文の場合
以下が本記事で追加の内容です。
さてusingは別名を定義する構文も併せ持ち、これをglobalにすることもできます。
global using GdipBitmap = System.Drawing.Bitmap;
これを公開したい場合は、以下のように Alias="Foo"
の要領で別名を書きます[1]。
MyGreatLib.props
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Using Include="System.Drawing.Bitmap" Alias="GdipBitmap" />
</ItemGroup>
</Project>
ジェネリック型のalias構文の場合
型引数が含まれる場合はどうでしょうか。
global using StringLazy = System.Lazy<string>;
global using MyDictionaryOfList = System.Collections.Generic.Dictionary<string, System.Collections.Generic.List<int>>;
これは<>
をエスケープしつつC#流にそのまま書けばOKです。
MyGreatLib.props
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Using Include="System.Lazy<string>" Alias="StringLazy" />
<Using Include="System.Collections.Generic.Dictionary<string, System.Collections.Generic.List<int>>" Alias="MyDictionaryOfList" />
</ItemGroup>
</Project>
これは一次情報源がわからず、私の試行錯誤で見つけたものなのでご注意を、とお断りしておきます。
実験した環境
- .NET 7
- Visual Studio 17.7.0
-
どこかで情報を得たと思いますが、記事執筆時には忘れてしまいました。思い出し次第追記します。 ↩︎
Discussion