c# - que - visual studio net
Error "No se pudo encontrar el tipo" al cargar un formulario en el DiseƱador de Windows Forms (11)
He tenido un problema como este (aunque no es el mismo) en el pasado, donde mi control estaba en un espacio de nombres diferente a mi formulario, incluso si estaba en el mismo proyecto. Para solucionarlo tuve que agregar un
using My.Other.Namespace;
en la parte superior del archivo de código generado por el diseñador. Lo molesto fue que se mantuvo alucinado cuando el diseñador reestructuró la página.
Tengo una aplicación de formularios para Windows .NET 2.0, que hace un uso intensivo del control ListView
.
He subclasificado la clase ListView
en una clase SortableListView<T>
, por lo que puede ser un poco más inteligente sobre cómo muestra las cosas, y ordenar por sí mismo.
Desafortunadamente, esto parece romper el diseñador de Visual Studio Forms, tanto en VS2005 como en 2008.
El programa compila y funciona bien, pero cuando intento ver el formulario propietario en el diseñador, obtengo estos errores:
- No se pudo encontrar el tipo ''MyApp.Controls.SortableListView''. Asegúrese de que se hace referencia al conjunto que contiene este tipo. Si este tipo es parte de su proyecto de desarrollo, asegúrese de que el proyecto se haya construido correctamente.
No hay ningún rastro de pila o información de línea de error disponible para este error
- La variable ''listViewImages'' no está declarada o nunca fue asignada.
En MyApp.Main.Designer.cs Línea: XYZ Column: 1
Call stack:
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.Error(IDesignerSerializationManager manager, String exceptionText, String helpLink)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeExpression(IDesignerSerializationManager manager, String name, CodeExpression expression)
at System.ComponentModel.Design.Serialization.CodeDomSerializerBase.DeserializeStatement(IDesignerSerializationManager manager, CodeStatement statement)
La línea de código en cuestión es donde realmente se agrega al formulario, y es
this.imagesTab.Controls.Add( this.listViewImages );
listViewImages se declara como
private MyApp.Controls.SortableListView<Image> listViewImages;
y se crea una instancia en el método InitializeComponent
siguiente manera:
this.listViewImages = new MyApp.Controls.SortableListView<Image>();
Como se mencionó anteriormente, el programa se compila y funciona perfectamente, y he intentado cambiar la clase SortableListView
a un conjunto separado para que pueda compilarse por separado, pero esto no hace diferencia.
No tengo ni idea de dónde ir desde aquí. ¡Cualquier ayuda sería apreciada!
El ensamblado que contiene MyApp.Controls.SortableListView no está instalado en el GAC por casualidad, ¿verdad?
cuando agregó la vista de lista, ¿la agregó a la caja de herramientas y luego la agregó al formulario?
Tenía algo similar: un control de usuario se refería a un servicio remoto (que no podía garantizar que estuviera disponible en el momento del diseño).
Esta publicación en MSDN sugiere que agregue
if (this.DesignMode) return;
a la función Cargar del control, o en mi caso al punto anterior al inicio del cliente WCF. Eso hizo el truco.
Asi que
private readonly Client _client = new Client();
se convierte
private Client _client;
public new void Load()
{
if(DesignMode) return;
_client = new Client();
}
Quizás olvidaste agregar eso:
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Release all resources used.
/// </summary>
/// <param name="disposing">true if managed resources should be removed otherwise; false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
private void InitializeComponent()
{
// ...
this.components = new System.ComponentModel.Container(); // Not necessarily, if You do not use
// ...
}
cuando agregó la vista de lista, ¿la agregó a la caja de herramientas y luego la agregó al formulario?
No, acabo de editar Main.Designer.cs
y lo cambié de System.Windows.Forms.ListView
a MyApp.Controls.SortableListView<Image>
Sospechar que podría haber sido debido a los genéricos me llevó a encontrar una solución.
Para cada clase para la que necesito hacer una SortableListView, definí una ''clase de stub'' como esta
class ImagesListView : SortableListView<Image> { }
Luego hizo que el archivo Main.Designer.cs
refiriera a estas clases de stub en lugar de a SortableListView
.
Ahora funciona, ¡hurra!
Afortunadamente, puedo hacer esto porque todos mis tipos se conocen desde el SortableListView
, y solo estoy usando SortableListView
como método para reducir el código duplicado.
En mi caso, ¡el problema era el nombre de la carpeta de mi proyecto! Por qué pienso esto: uso SVN y en el ''trunk / SGIMovel'' funciona perfectamente. Pero en una carpeta de sucursal llamada ''OS # 125 / SGIMovel'' no puedo abrir el diseñador para un formulario que utiliza un control personalizado y funciona en la carpeta troncal.
Acaba de salir del # y funciona bien.
Gracias por nada.
Tuve el mismo problema. En mi caso, este problema se debió a la inicialización de los recursos. Moví el siguiente código del método InitializeComponent
a ctor (después de llamar a InitializeComponent
). Después de que este problema se resolvió:
this->resources = (gcnew System::ComponentModel::ComponentResourceManager(XXX::typeid));
También tuve este problema relacionado con la fusión de cambios SVN masivos (con conflictos) en el archivo * .Designer.cs. La solución fue simplemente abrir la vista de diseño gráficamente, editar un control (moverlo hacia la izquierda y luego hacia la derecha) y volver a guardar el diseño. El archivo * .Designer.cs cambió mágicamente, y la advertencia desapareció en la siguiente compilación.
Para que quede claro, primero debe solucionar todos los problemas de combinación de código. Esto es solo un trabajo para forzar a VS a recargarlos.
He tenido el mismo problema. Después de eliminar algunos de mis controles del archivo * .Designer.cs-File, el problema se solucionó. Después de volver al código original, el problema aún se resolvió. Entonces parece ser un problema con el caché de Visual Sudio. Por el momento no puedo reproducir este problema.
Si tiene el problema intente encender la carpeta
C: / Users / YOURNAME / AppData / Local / Microsoft / VisualStudio / VERSION / Designer / ShadowCache
¿Funcionó?
Me pasó a causa de la arquitectura x86 / x64.
Como Visual Studio (la herramienta de desarrollo en sí misma) no tiene una versión x64, no es posible cargar el control x64 en el diseñador de GUI.
El mejor enfoque para esto podría ser ajustar la GUI en x86 y compilarla para x64 cuando sea necesario.