Tengo un problema con espacios de nombres y códigos conflictivos que el diseñador de formularios genera automáticamente en Visual Studio 2008. He buscado muchos foros y documentación diferente, pero no he podido encontrar Alguna solución a este problema.Espacios de nombres, alias y diseñador de Visual Studio Forms
tengo una asamblea llamada Foo.dll con el siguiente espacio de nombres/código:
namespace Foobar.System
{
public class MySystemClass() { }
}
Entonces, tengo otro conjunto que contiene som formas usadas comúnmente:
namespace Foobar.MyCommonForms
{
public class MyForm : System.Windows.Forms.Form
{
public void SomeMethod()
{
var systemclass = new Foobar.System.MySystemClass();
}
}
}
Aquí, los compiladores muestra el siguiente error: Tipo o espacio de nombres 'Windows' no es parte del espacio de nombres 'Foobar.System'. Obviamente, el compilador intenta buscar la clase System.Windows.Forms.Form en el espacio de nombres Foobar.System.Windows.Forms!
He podido resolver esto usando el alias 'x' en lugar de 'global' cuando hago referencia al ensamblado Foo.dll, y declaro 'extern alias x' en mis archivos de código, y pongo 'x :: 'delante de cada referencia a tipos y clases en el espacio de nombres Foobar.System. El código compila
Pero parece que el diseñador de formularios no reconoce esto, y me da un error al intentar mostrar el formulario. Esto, una vez más, se puede resolver colocando manualmente 'global ::' frente a cada referencia a las clases en System.Windows.Forms (por ejemplo, global :: System.Windows.Forms.Button), pero cada vez que se hacen oportunidades para el formulario, el código se vuelve a generar automáticamente y se elimina la parte 'global ::'.
Entonces, la pregunta es: ¿hay alguna manera de que el diseñador de formularios tenga conocimiento del alias 'x' que se usa para hacer referencia a mi ensamblador Foo.dll, o hay otra mejor solución para esto? Cambiar el nombre del espacio de nombres Foobar.System a otra cosa es demasiado trabajo.
¡Estoy experimentando este problema en VS 2010 también! –