Interní klíčové slovo v C# může zpřístupnit označené metody, pole nebo atributy pouze v aktuálním assembleru, takže co když ostatní assemblery potřebují použít tuto interní metodu? .NET nabízí způsob, jak tuto funkci provést podobně jako friendclass v C++, tedy použitím InternalsVisibleTo.
To je běžné při testování, kdy je potřeba jiný projekt, který otestuje funkcionalitu označenou interní metodou v projektu, takže s InternalsVisibleTo nemusíme měnit metodu, která by neměla být veřejná, abychom mohli provádět jednotkové testování.
Stále je třeba věnovat pozornost při používání InternalsVisibleTo, zejména PublicKey není snadné pochopit, pojďme si promluvit, jak používat tento InternalsVisibleTo:
Nejprve vysvětlíme základní předpoklad: Project1 je funkční projekt a Project1.Test (název assembleru: Project1.Test.dll) je testovací projekt pro Project1.
1. Otevřete Assembly.cs soubor Project1 a přidejte tuto větu na konec souboru:
PublicKey=****** by měl být nahrazen Project1.Test.dll veřejným klíčem, pokud jde o získání PublicKey, viz sekce Poznámky na konci článku.
2. Ověřit, že jmenný prostor: System.Runtime.CompilerServices je přidán do reference jmenného prostoru Assembly.cs, protože InternalsVisibleTo se nachází ve jmenném prostoru System.Runtime.CompilerService.
Notes:
1. Jak získám PublicKey?
Odpověď: V příkazovém řádku použijte sn -tp Project1.Test.dll pro zobrazení PublicKey a PublicKeyToken
2. Pokud je Project1 projekt se silným názvem, pak InternalsVisibleTo musí specifikovat PublicKey, takže Project1.Test musí také použít silný podpis, aby správně použil InternalsVisibleTo, jinak kompilace udělá chybu, pokud Project1 nepoužije silný podpis, Pak Project1.Test nemusí používat silné podpisy a při použití InternalsVisibleTo je potřeba pouze název sestavy a není nutné nastavovat PuklicKey. |