2009-11-26 10 views
5

Je rencontre un problème avec les espaces de noms et le code conflictuels qui sont générés automatiquement par le concepteur de formulaires dans Visual Studio 2008. J'ai recherché de nombreux forums et de la documentation différente, mais je n'ai pas pu trouver toute solution à ce problème.Espaces de noms, alias et Visual Studio Forms Designer

je un ensemble appelé Foo.dll avec l'espace de noms/code suivant:

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

Ensuite, j'ai un autre ensemble qui contient des formes de som couramment utilisés:

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

Ici, les compilateurs affiche l'erreur suivante: Type ou espace de nom 'Windows' ne fait pas partie de l'espace de noms 'Foobar.System'. Évidemment, le compilateur essaie de rechercher la classe System.Windows.Forms.Form dans l'espace de noms Foobar.System.Windows.Forms!

J'ai pu résoudre ceci en utilisant l'alias 'x' au lieu de 'global' en référence à l'assembly Foo.dll, et en déclarant 'extern alias x' dans mes fichiers de code, et mettez 'x :: 'devant chaque référence aux types et classes dans l'espace de noms Foobar.System. Le code compile.

Mais il semble que le concepteur de formulaires ne le reconnaisse pas, et me donne une erreur en essayant d'afficher le formulaire. Ceci, encore une fois, peut être résolu en plaçant manuellement 'global ::' devant chaque référence aux classes dans System.Windows.Forms (par exemple global :: System.Windows.Forms.Button), mais chaque fois que des chances sont faites à la forme, le code est automatiquement généré à nouveau et la partie 'global ::' est supprimée. Donc, la question est: Y at-il un moyen de rendre le concepteur de formulaires au courant de l'alias 'x' qui est utilisé pour référencer mon assembly Foo.dll, ou y a-t-il une autre meilleure solution à cela? Renommer l'espace de noms Foobar.System à autre chose est juste trop de travail.

+0

Je rencontre aussi ce problème dans VS 2010 !! –

Répondre

0

Il n'y a aucun moyen de contourner cela, d'après ce que je peux dire.

Les outils de refactoring populaires tels que Resharper ou Refactor! les deux incluent la possibilité de renommer globalement un espace de noms. J'envisagerais sérieusement d'utiliser ceux-là.