2016-11-21 1 views
4

私はそれが持つ可視可能な変化である知っている:だから私のテストプロジェクトは、クラスFooのためのテストを作成することができますいくつかの設定で、C#で別のアセンブリにすべての内部クラスを表示させることはできますか?

using System.Runtime.CompilerServices; 

[assembly: InternalsVisibleTo("UnitTests")] 

namespace Foobar 
{ 
    internal class Foo 
    { 
     //... 
    } 
} 

。問題は、私はたくさんの内部クラスを持っているので、それを汚したくないということです。assemblyという表現です。プロジェクト全体に対してこれを行う別の方法はInternalsVisibleTo("UnitTests")ですか?

+1

実際にソリューション内のすべてのプロジェクトを意味しましたか? @CodeCasterノートのように、 'InternalsVisibleTo()'属性は、属性を配置するプロジェクト内のすべての内部型に既に適用されています。ソリューション内のすべてのプロジェクトのすべての型に適用する場合は、属性ソリューションスペースの別のフォルダに別のファイルとして保存し、すべてのプロジェクトに間接参照として含めます。 –

+1

私はこのソリューションに2つのプロジェクトを持っています.1つはUTestsで構成されています。そしてそれは@CodeCasterの解決策をうまく動作させます。この場合、最もシンプルなようです。あなたの言うことはおもしろいと思うけど、今はあまりにも多くのプロジェクトがありません。 お返事ありがとうございます! – Denr2

答えて

9

[InternalsVisibleTo]属性はアセンブリレベルの属性です。つまり、一度定義するとアセンブリ全体に適用されます。

あなたが表示する行は、すべての内部型に適用するためにプロジェクトに1回だけ含める必要があります。

他のアセンブリレベルの属性が指定されている場所に移動することをお勧めします。プロジェクトの[プロパティ]フォルダのAssemblyInfo.csファイルに移動します。 @CodeCasterからのコメント時に拡大すること

+0

はい、それは完璧に動作します! – Denr2

4

、属性が

例えば、プロジェクトのプロパティ]セクションに

AssemblyInfo.cs 

に配置する必要がありますあなたも完全例えばアセンブリ名に

を修飾する必要があります

[assembly: AssemblyVersion("1.0.0.0")] 
[assembly: AssemblyFileVersion("1.0.0.0")] 
[assembly: InternalsVisibleTo("UnitTests")] 

[assembly: InternalsVisibleTo("Foo.Bar.UnitTests")] 
+0

属性の配置場所は問わないので、「should」はあまりにも強すぎると思います。 – CodeCaster

+1

合意は、あまりにも強すぎるはずですが、一般的なアセンブリレベルの属性を置くための標準的な場所と思われます。 – AlanT

関連する問題