Der Typ 'X' existiert nicht in der Art 'Y. Z'
Unser team hat vor kurzem migriert von Visual Studio 2008/.NET3.5 Visual Studio 2010/.NET4.0. Nun, VS2010 gibt mir eine seltsame Fehlermeldung. Es ist reproduzierbar mit dem folgenden Programm:
using System;
namespace Some.Main
{
}
namespace SomeLib
{
interface Some
{
}
}
namespace ConsoleApplication1
{
using Some.Main;
using SomeLib;
class Program
{
static void Main(string[] args)
{
Console.Write("Press enter to continue");
Console.ReadLine();
}
}
}
Diese funktioniert nur in VS2008, aber in VS2010 bekomme ich die folgende Fehlermeldung:
Den Typ Namen 'Main' existiert nicht in der Art " SomeLib.Einige'
Interessanterweise, wenn ich auf "Build Solution", die das Programm baut ganz gut, und ich kann sogar führen Sie es ohne Probleme. Es ist nur Visual Studio, die zu haben scheint ein problem mit diesem code.
Leider, ich arbeite an einem groß-ish legacy-Anwendung, und ich kann nicht (leicht) ändern Sie die Namen dieser namespaces.
Ich würde gerne wissen, wie ich diese Fehler beheben kann, und ich bin auch gespannt, was es bewirkt.
- versuchen
using global::Some.Main;
- Es ist schon komisch. Dass der genaue code, kompiliert auf Mono (die Letzte). Aber auf Visual Studio 2010 ist es nicht
- Es ist sogar noch schlimmer, denn auf Visual Studio 2008 kompiliert auch.
- ideone verwendet Mono für C#. Finden Sie hier Ihren code kompiliert fine ideone.com/zmLCO
- vielleicht fragt Eric Lippert ist eine gute Idee. Er könnte erklären, die Diskrepanz
- Ich denke, Sie haben einen bug gefunden auf Visual Studio 2010 ツ Sprache-klug, Ihr code ist vollkommen gültig, es selbst baut
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du einfach den editor verwirrt.
Some
ist sowohl ein Namensraum-und interface-Namen, offenbar ist es nicht überprüfen/analysierenusing
s in der Reihenfolge in der Sie deklariert sind.Wenn Sie deutlich machen wollen, Sie sind bezogen auf den namespace und nicht den Namen eingeben, fügen Sie einfach
global::
zu denusing
Erklärung (zum start von der root namespace), so:UPDATE
Sehr gute post hier auf, DAMIT verknüpft, die von @alex in einem Kommentar: Sollte 'mit' Aussagen sein, die innerhalb oder außerhalb der namespace?
Ich denke, dass IntelliSense ist verwirrt durch die Benennung und nicht "verstehen", wer wer ist.
Angehängte screenshot zeigt, was Los ist: IntelliSense "denkt"
Some.Main
bezieht sich auf die Schnittstelle namensSome
, wahrscheinlich weil es nicht ein namespace mit der BezeichnungSome
überall.Glücklicherweise der compiler nicht täuschen, und der code scheint zu funktionieren, wie Sie sagte.
Versuchen Sie dies:
using
s herum führen könnte, um code zu brechen und sollte nicht gemacht werden blind! Siehe stackoverflow.com/questions/125319/...