views:

63

answers:

2

I am building a class library and using its default namespace as "System". There suppose I am creating a generic data structure say PriorityQueue and putting it under System.Collections.Generic namespace.

Now when I am referencing that library from another project, I can't see PriorityQueue under "System.Collections.Generic" namespace anymore. Though the library is referenced in that project I can not access any of the classes in it.

My question was mscorlib and System.dll share similar namespaces, but still classes from both the assembly is accessible, but why can't mine? If I put a public class under System.Collections.Generic namespace in my class library and refer that library in a project and use a statement like "using System.Collections.Generic", still why I can't access my class there?

This was an experimentation I did, I know using System namespace is not encouraged in custom class library, but I want to know the reason behind why I can't access my class in this special case?

Please someone shed some light on it.

PS: Last time I asked similar question but put it wrongly, so people got misunderstood and I didn't get my answer. This time I am trying to put it correctly as far as I can. Sorry for the misunderstanding.

A: 

I just tested out some code, and I can extend the System namespace in my own project and then call the new classes from some other project in the same solution. I don't know why are you not able to do it.

apoorv020
+1  A: 

The problem appears to arise when you use a "Project Reference" rather than an "Assembly Reference".

Use an "assembly Reference".

This is such a bad idea that I am reluctant to delve into the underlying reasons.

Update

I am guessing that when you use a project reference (from your System namespace project), the issue arises as the build does not know that it should resolve the dependency from your referenced project, but instead it attempts to resolve it from one of the assemblies that is already referenced i.e. System.dll. It obviously does not exist in System.dll. If you add a direct reference to a built version of your dll, the build will be able to resolve it.

chibacity
Thanks chibacity
Anindya Chatterjee
As I commented on your other question, please reflect on what would happen if everyone tried to attempt to do what you are doing - chaos. Microsoft can use this technique because they are doing it with their **own** namespace. The "System" namespace is not yours. Please use your own namespaces.
chibacity