📋

.NET StandardプロジェクトでInternalsVisibleToを設定する方法

に公開

.NETには、例えばinternalなクラスやメソッドのUnitTestをUnitTestプロジェクトから呼び出す仕組みとして、「InternalsVisibleTo」という属性があります。

従来の.NET Frameworkプロジェクトでは、プロジェクト作成時にPropertiesの下にAssemblyInfo.csが作成されその中に定義する方法が一般的でした。

しかし、.NET StandardにはAssemblyInfo.csが存在しません。

ここでは.NET StandardプロジェクトでInternalsVisibleToを設定する方法を紹介します。

結論から言いますと、適当な「~.cs」ファイルを作成しその中に定義すれば解決できます。

順を追って説明しましょう。

プロダクト プロジェクトとしてNetStdLibが存在し、対応するUnitTestプロジェクトとしてNetStdLib.Testsを作成するものとします。

この時、スコープがinternalなつぎのようなクラスが存在したとします。

namespace NetStdLib
{
    internal class InternalClass
    {
        internal string SayHello()
        {
            return "Hello, InternalVisibleTo!";
        }
    }
}

このクラスのテストコードをNetStdLib.Tests側に作成します。

すると当然アクセスできずエラーとなります。

そこでNetStdLib側に、通常のクラスを作成するのと同じ手続きでAssemblyInfoクラスを作成します。(ファイル名は実際のところ何でも問題ありません。)

作成すると、つぎのようなコードが自動生成されます。

これを全て削除して、次の2行に置き換えます。

using System.Runtime.CompilerServices;
[assembly: InternalsVisibleTo("NetStdLib.Tests")]

これでNetStdLib.TestsプロジェクトからNetStdLibプロジェクトのinternalレベルへのアクセスが可能となります。

以上です。

Discussion