Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When should [assembly: InternalsVisibleTo()] be used?

I understand that the InternalVisibleTo attribute is used to expose types and methods with the internal access modifier to a specified assembly. I have only ever used this for exposing internal methods to a separate assembly containing a suite of unit tests.

I am struggling to think of another scenario when this should be used. Was this attribute introduced specifically to aid unit testing or was there another reason?

like image 727
fletcher Avatar asked Jul 19 '10 08:07

fletcher


People also ask

What's the usage of InternalsVisibleTo attribute?

From the documentation, the assembly-level InternalsVisibleTo attribute: Specifies that all nonpublic types in an assembly are visible to another assembly. This attribute was introduced in C# 2.0, and allows you to specify other assemblies that can see all types and members marked “internal”.

What is DynamicProxyGenAssembly2?

DynamicProxyGenAssembly2 is a temporary assembly built by mocking systems that use CastleProxy like Moq or NSubsitute. It is generated when the mock is needed and disposed of after the tests are finished.

How do I find my public key for InternalsVisibleTo?

In the "Solution explorer" click on your project assembly name, and then head to "Tools > Get PublicKey".


1 Answers

A scenario can be that you have separation of logic between assemblies (like internal data objects and the logic layer). You don't want to expose the classes to your users, but you still want to use the objects in your own assemblies.

I think this is not a very common scenario, I hardly ever use InternalsVisibleTo in non unit tests context.

like image 68
Elisha Avatar answered Oct 22 '22 03:10

Elisha