Nirajan Singh
Nirajan Singh

Reputation: 2885

Sharing dll without adding reference

I have got a dll placed in a shared folder over development server. Is there any way to use that dll without adding reference in my application and without installing the same in GAC.

Thanks in advance.

Upvotes: 1

Views: 3303

Answers (7)

Jeremy McGee
Jeremy McGee

Reputation: 25200

If this assembly is in a shared folder, you may find that .NET security restrictions stop you working with classes in that assembly in quite the way you'd expect.

Rather than storing on a shared folder, you may want to consider checking in the assembly to your source code repository. (I've seen a "/lib" folder used to good effect for this). Then you can reference the assembly directly.

(There are also repository solutions such as Maven that can more properly control this. However, they don't play well with .NET, unfortunately.)

Upvotes: 0

Webleeuw
Webleeuw

Reputation: 7272

Assembly asm = Assembly.LoadFrom(path);

See MSDN for late binding, reflection etc.

Small edit: A variable with the keyword "as" is asking for trouble. So "Assembly as" changed to "Assembly asm" should be safer.

Upvotes: 2

Arthur
Arthur

Reputation: 8129

I also would read Suzanne Cook's .NET CLR Notes.

http://blogs.msdn.com/suzcook/default.aspx

Upvotes: 0

Cheeso
Cheeso

Reputation: 192417

Yes,

you can call Assembly.Load() and then make use of Reflection to call into the public interface (lowercase "interface" - what I mean is the methods, fields and properties) exposed by the assembbly.

But in order to do that you need to know what methods to call. It helps if you can be certain that the assembly includes classes that do conform to a known .NET interface.

This idea is the basis for "plug-in" architectures in many tools, where the tool loads any assembly in its "plugin" directory, instantiates classes, casts the result to an ISomething, and then invokes methods via that interface.

Upvotes: 0

Ruben Bartelink
Ruben Bartelink

Reputation: 61795

Using Assembly.LoadFrom would be the only way to have zero references, but you'd still need to share contracts.

What's the problem with adding a reference?

What are you going to do when someone wants to work on a laptop and the WiFi goes down?

Upvotes: 0

Eamon Nerbonne
Eamon Nerbonne

Reputation: 48066

You may want to look at the Managed Extensibility Framework or at Assembly.Load... in the base framework.

Why would you want to do this, though? You'd need to call any code within the Assembly via reflection (hence the suggestion that the MEF may be what you're really after).

Upvotes: 1

Bobby
Bobby

Reputation: 11576

Yes, it is possible...somehow. Have a look at the Assembly-Class. With it you can load assemblies from a file without knowing what you exactly load.

Upvotes: 0

Related Questions