Sto riscontrando un problema con spazi dei nomi e codice in conflitto che vengono generati automaticamente dal progettista di moduli in Visual Studio 2008. Ho cercato molti forum e documentazione diversa, ma non sono stato in grado di trovare qualsiasi soluzione a questo problema.Namespace, alias e Visual Studio Forms Designer
ho un'assemblea chiamata Foo.dll con il seguente spazio dei nomi/code:
namespace Foobar.System
{
public class MySystemClass() { }
}
Poi, ho un altro assembly che contiene som forme di uso comune:
namespace Foobar.MyCommonForms
{
public class MyForm : System.Windows.Forms.Form
{
public void SomeMethod()
{
var systemclass = new Foobar.System.MySystemClass();
}
}
}
Qui, i compilatori visualizza il seguente errore: Tipo o spazio dei nomi 'Windows' non fa parte dello spazio dei nomi 'Foobar.System'. Ovviamente, il compilatore prova a cercare la classe System.Windows.Forms.Form nello spazio dei nomi Foobar.System.Windows.Forms!
Sono stato in grado di risolvere questo utilizzando l'alias 'x' invece di 'globale' quando si fa riferimento all'assembly Foo.dll e dichiarando 'extern alias x' nei miei file di codice, e metti 'x :: 'di fronte a ogni riferimento a tipi e classi nel namespace Foobar.System. Il codice viene compilato.
Ma sembra che il progettista di moduli non lo riconosca e mi dà un errore quando provo a visualizzare il modulo. Questo, ancora una volta, può essere risolto mettendo manualmente 'global ::' davanti a ogni riferimento alle classi in System.Windows.Forms (es. Global :: System.Windows.Forms.Button), ma ogni volta le possibilità vengono fatte al forma, il codice viene automaticamente rigenerato e la parte 'global ::' viene rimossa.
Quindi, la domanda è: c'è un modo per rendere il progettista di moduli consapevole dell'alias 'x' che viene utilizzato per fare riferimento al mio assembly Foo.dll, o c'è un'altra soluzione migliore per questo? Rinominare lo spazio dei nomi Foobar.System in qualcos'altro è troppo lavoro.
Sto riscontrando questo problema anche in VS 2010 !! –