Jeremy Tang
Jeremy Tang

Reputation: 163

Hiding types from being listed in Assembly.GetTypes in .net

Ive been looking everywhere for a possible solution to this but can't seem to find an answer. My issue is that I have a few classes that need to completely hidden from Assembly.getTypes, as I'm writing a plugin for an application, and it's picking up types that I need to remain hidden (this happens even if they are declared as private or internal classes).

anyone know how to either alter what assembly.GetTyes returns, or an ,aficionado attribute that will keep those types from being listed?

Upvotes: 9

Views: 1278

Answers (3)

Austin Salonen
Austin Salonen

Reputation: 50225

This is quite a hack and is very fragile, but could work.

Create 2 assemblies -- one for the plug-in and the second for the other types. The second would be placed in another known directory and loaded dynamically into the first when needed. (For example, via Assembly.LoadFrom.)

The first assembly would then be placed in the plug-in directory and only ever publish its types. This very fragile because you would likely have to hard-code a path to the second assembly and you run the risk of the file getting deleted or moved.

EDIT
@SLaks' comment takes away the fragility of this solution. If you embed the second assembly as a resource and load it at run-time, the app calling Assembly.GetTypes won't see the types you want hidden.

Upvotes: 6

SLaks
SLaks

Reputation: 887453

This is not possible.
Sorry.

Code that calls Assembly.GetTypes() should typically filter for only public types.

Upvotes: 2

Ben Voigt
Ben Voigt

Reputation: 283634

Welcome to managed code. Complete type information is necessary to .NET's type verifier. Only native code can be hidden from .NET metadata, and then you give up the portability and permissions supported by pure MSIL.

Upvotes: 0

Related Questions