2011-06-06 21 views
26

tengo una molestia que se viene produciendo desde hace bastante tiempo con Visual Studio 2010. Tengo un archivo de clase que he hecho lo que ahorra VS como tipo "Componente" por ninguna razón Puedo discernir Si lo olvido y trato de abrir el archivo, busca un diseñador que no existe.VS 2010 estableciendo archivo de clase no GUI como Componente

He buscado en Google y he encontrado algunos problemas similares para VS 2005, pero los problemas parecían estar relacionados con la derivación de las clases de componentes de la GUI (listbox, combobox, etc.). Esta clase no hace eso.

El archivo es GpsUtilities.cs. Aparece en el archivo csproj de la siguiente manera, con SubType de Component. No existen otras referencias al archivo, es decir, nada lo reclama como DependentUpon.

<Compile Include="Utilities\GpsUtilities.cs"> 
    <SubType>Component</SubType> 
</Compile> 

Incluso si quito la etiqueta SubType, e incluso si lo establezca explícitamente en lugar de CodeComponent, todavía guarda como SubType de Component.

Aquí está la estructura de clases (todo el código quitó). Como dije, no hereda, ni siquiera importa el espacio de nombres de, cualquier cosa relacionada con la GUI.

using System; 
using System.ComponentModel; 
using System.IO.Ports; 
using System.Text.RegularExpressions; 
using System.Timers; 
using System.Xml.Serialization; 

namespace AppNamespace 
{ 
    public class GpsUtil : INotifyPropertyChanged 
    { 
     public GpsUtil() { } 

     public static GpsUtil CreateInstance() { } 

     public bool IsGpsReady { get; } 

     public GPSPort GpsSerialPort { get; private set; } 

     public Timer GpsTimer { get; set; } 

     private CircularArray<GpsPositionData> PositionBuffer { get; set; } 

     private GpsPositionData m_GpsCurLoc; 

     public GpsPositionData MyLocation { } 

     public string GpggaPattern { get; set; } 

     public Regex GpggaRegEx { get; set; } 

     public GpsPositionData GpsPosDataFromRegExMatch(Match gpsRegExMatch) { } 

     public void SetGpsPosition(double latitude, double longitude) { } 

     private void gpsTimer_Elapsed(object sender, ElapsedEventArgs e) { } 

     private bool InitializeGpsPort() { } 

     public bool TestGpsPort() { } 

     public double ComputeSquaredDistance(double startLat, double startLon, double endLat, double endLon) { } 

     public event PropertyChangedEventHandler PropertyChanged; 
    } 

    public class GPSPort : SerialPort 
    { 
     public GPSPort(string portName, int baudRate = 9600) : base(portName, baudRate) 
     { 
     } 

     private bool TestResult { get; set; } 

     public bool Test(int interval = 3000, bool leavePortOpen = false) {} 
    } 

    public enum GpsFixQuality { Invalid = 0, GpsFix = 1, DgpsFix = 2 } 

    [Serializable] 
    public class GpsPositionData 
    { 
     public GpsPositionData() { } 

     public GpsPositionData(double latitude, double longitude) {} 

     public override string ToString() {} 

     public bool IsCloseTo(GpsPositionData otherPoint, double tolerance = 0.0001) {} 

     public GpsPositionData(DateTime time, double latitude, double longitude, GpsFixQuality fixQuality, int numberOfSatellites, double hdop, double altitude, double geodialSeparation, int ageOfDgps, string dgpsRefStationId){} 

     [XmlIgnore] 
     public DateTime Time { get; private set; } 

     [XmlElement("Latitude", typeof(double))] 
     public double Latitude { get; set; } 

     [XmlElement("Longitude", typeof(double))] 
     public double Longitude { get; set; } 

     [XmlIgnore] 
     public GpsFixQuality FixQuality { get; private set; } 

     [XmlIgnore] 
     public int NumberOfSatellites { get; private set; } 

     [XmlIgnore] 
     public double Hdop { get; private set; } 

     [XmlIgnore] 
     public double Altitude { get; private set; } 

     [XmlIgnore] 
     public double GeodialSeparation { get; private set; } 

     [XmlIgnore] 
     public int AgeOfDgps { get; private set; } 

     [XmlIgnore] 
     public string DgpsRefStationId { get; private set; } 
    } 
} 

Gracias de antemano.

+1

no responde directamente a su pregunta, pero se puede hacer VS abrir el código por defecto para todo. Haga clic con el botón derecho en el archivo, abra con, seleccione "editor de código fuente" (¡no con la codificación!), Y haga clic en "Establecer como predeterminado" antes de cerrar el cuadro de diálogo. –

+0

De hecho, hice algo similar a eso para abrir archivos XAML como solo XML. Quería algo un poco más limpio para esto, así que lo que Kent dijo a continuación era lo mejor, pero gracias por su aporte. – dythim

Respuesta

29

Si desea mantener todas las clases en un solo archivo, puede usar el atributo [System.ComponentModel.DesignerCategory("Code")] en la clase GPSPort para anular el comportamiento predeterminado. Details aquí, tenga en cuenta que debe utilizar el atributo completo, incluso si tiene una declaración using System.ComponentModel o VS lo ignorará.

+0

¡Una solución mucho mejor! Gracias. – dythim

14

En una conjetura, diría que es debido a su clase GPSPort, que se extiende SerialPort, que se extiende Component. Intente eliminar eso (o moverlo a un archivo separado) y vea si soluciona el problema.

+0

Eso sí lo solucionó. Gracias. – dythim

+1

tuve un problema similar donde '' guarda el conseguir añadió Componente y se elimina del archivo .csproj - parece que tienen tipos adicionales en el mismo fichero que para un tipo que se deriva del 'System.ComponentModel.Component' fue la causa . Dividí los tipos en archivos separados (como pretendía la naturaleza, y como sugeriste) y parece más feliz ahora. –

+0

no era el 100% lo mismo, pero esto ayudó a resolver mi problema de manera marcada. Gracias – Seabizkit

Cuestiones relacionadas