2009-11-26 22 views
5

Ich habe ein Problem mit in Konflikt stehenden Namespaces und Code, der vom Formulardesigner in Visual Studio 2008 automatisch generiert wird. Ich habe viele Foren und verschiedene Dokumentation gesucht, aber nicht gefunden irgendeine Lösung für dieses Problem.Namespaces, Aliase und Visual Studio Forms-Designer

Ich habe eine Baugruppe Foo.dll mit dem folgenden Namespace/code genannt:

namespace Foobar.System 
{ 
    public class MySystemClass() { } 
} 

Dann habe ich eine andere Anordnung, die som häufig verwendete Formulare enthält:

namespace Foobar.MyCommonForms 
{ 
    public class MyForm : System.Windows.Forms.Form 
    { 
     public void SomeMethod() 
     { 
      var systemclass = new Foobar.System.MySystemClass(); 
     } 
    } 
} 

Hier die Compiler den folgenden Fehler anzeigen: Typ oder Namespace 'Windows' ist nicht Teil des Namespaces 'Foobar.System'. Offensichtlich versucht der Compiler nach der Klasse System.Windows.Forms.Form im Namespace Foobar.System.Windows.Forms zu suchen!

Ich konnte dies lösen, indem ich den Alias ​​'x' anstelle von 'global' verwendete, wenn ich auf die Assembly Foo.dll referenzierte und 'extern alias x' in meinen Code-Dateien deklarierte, und setze 'x :: 'vor jeder Referenz auf Typen und Klassen im Namensraum Foobar.System. Der Code wird kompiliert.

Aber es scheint, dass der Formular-Designer dies nicht erkennt, und gibt mir einen Fehler beim Versuch, das Formular anzuzeigen. Dies kann wiederum dadurch gelöst werden, dass 'global ::' vor jeder Referenz auf Klassen in System.Windows.Forms manuell gesetzt wird (zB global :: System.Windows.Forms.Button), aber jedes Mal, wenn die Chance besteht, dass die form, der Code wird automatisch neu generiert und der 'global ::' Teil wird entfernt. Die Frage ist also: Gibt es eine Möglichkeit, den Formular-Designer auf den Alias ​​'x' aufmerksam zu machen, der für meine Assembly Foo.dll verwendet wird, oder gibt es eine andere, bessere Lösung? Das Umbenennen des Namensraums Foobar.System in etwas anderes ist einfach zu viel Arbeit.

+0

Ich habe dieses Problem auch in VS 2010 !! –

Antwort

0

Es gibt keinen Weg um das, von dem, was ich sagen kann.

Die beliebten Refactoring-Tools wie Resharper oder Refactor! Beide enthalten die Möglichkeit, einen Namespace global umzubenennen. Ich würde ernsthaft darüber nachdenken, diese zu benutzen.