C# - problem med del av namespace som är lika som namespace i annat objekt

Permalänk
Medlem

C# - problem med del av namespace som är lika som namespace i annat objekt

Försöker använda Common.Logging från en utilityklass som jag lagt i namespacet MyNameSpace.Common.Utils. Det vägrar visual studio 2010 godkänna. Så fort min egen klass har med "Common" någonstans så hittar den inget som börjar med Common utanför det egna projektet.

Hur fungerar C#, kan man inte ha flera namespace där någon del av namespacet är lika?

Permalänk
Inaktiv

Det borde väl fungera? Har för mig jag hade samma problem i ett projekt där ".color" var en gemensam nämnare i flera namespaces. Det enda man behövde göra var att referera till vilket namespace det gällde.

Permalänk
Medlem

Alltså namespace är bara ett globalt scope, alla dina klasser ska vara inom samma namespace om dom ska kunna hitta varandra.

http://msdn.microsoft.com/en-us/library/z2kcy19k%28v=vs.80%29...

Btw är inte helt säker på vad du menar, du kanske kan slänga upp din kod på pastebin eller något?

Visa signatur

CPU: 2600K+H100 kylning, GPU: GTX470, RAM: 8GB DDR3, HDD: Force3 128GB, Mobo: Asrock P67,
Chassi: Antec P280, Skärmar: Acer 245HQ + Nån billig 60Hz 24".

Citera mig för garanterat svar.

Permalänk
Medlem

Problemet är att när du är i namespacet MyNameSpace.Common.Utils och försöker använda Common.Logging så kommer kompilatorn först att leta efter Common i Utils. Eftersom det inte finns där så går den vidare till Common för att till slut hamna i MyNameSpace där den hittar Common. Eftersom den nu hittat ett namespace som heter Common så börjar den leta efter Logging, men misslyckas eftersom det är fel namespace.

Du måste alltså ange exakt vilket namespace den ska leta i, eftersom kompilatorn annars slutar leta så fort den hittar något namespace som matchar. Nu har jag inte använt C# särskilt mycket, men jag tror att du kan använda global::Common.Logging för att ange att du vill använda Common.Logging från det globala namespacet (om det nu ligger i det globala namespacet). Dvs. kompilatorn börjar leta från topnivån istället för i det namespace du just nu är i.

Du borde också kunna lägga ett "using CLAlias = Common.Logging" utanför ditt namespace för att skapa ett alias till Common.Logging. Då kan du använda CLAlias:: istället för Common.Logging. Se exempel hos MSDN.