VS 2010 configura el archivo de clase no GUI como componente

Tengo una molestia que ha estado ocurriendo durante bastante tiempo con Visual Studio 2010. Tengo un archivo de clase que he creado y que VS guarda como tipo “Componente” sin ninguna razón que pueda discernir. Si olvido e bash abrir el archivo, busca un diseñador que no existe.

Busqué en Google y encontré algunos problemas similares para VS 2005, pero los problemas parecían estar relacionados con derivar de las clases de componentes GUI (cuadro de lista, cuadro combinado, 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 .

  Component  

Incluso si SubType etiqueta de SubType , e incluso si la establezco explícitamente en Code lugar de Component , aún la guarda como SubType de Component .

Aquí está la estructura de clase (todo el código eliminado). Como dije, no hereda ni importa el espacio de nombres de nada relacionado 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 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 por adelantado.

Si desea mantener todas las clases en un archivo, puede usar el atributo [System.ComponentModel.DesignerCategory("Code")] en la clase GPSPort para anular el comportamiento predeterminado. Los detalles aquí, tenga en cuenta que debe usar el atributo totalmente calificado incluso si tiene una statement de using System.ComponentModel o VS lo ignorará.

En una conjetura, yo diría que se debe a su clase de GPSPort , que extiende SerialPort , que extiende el Component . Intente eliminarlo (o moverlo a un archivo separado) y ver si soluciona el problema.