Подтвердить что ты не робот

VS 2010 устанавливает файл класса не GUI как компонент

У меня есть досада, которая довольно долгое время протекает с Visual Studio 2010. У меня есть файл класса, который я создал, который VS сохраняет как тип "Компонент", без причины, который я могу различить. Если я забуду и попытаюсь открыть файл, он ищет конструктора, которого не существует.

Я просмотрел Google и нашел некоторые похожие проблемы для VS 2005, но проблемы, похоже, связаны с получением классов компонентов GUI (listbox, combobox и т.д.). Этот класс этого не делает.

Файл GpsUtilities.cs. Он появляется в файле csproj следующим образом: SubType Component. Других ссылок на файл нет, т.е. Ничего не утверждает как DependentUpon.

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

Даже если я удалю тэг SubType, и даже если я явно установил его в Code вместо Component, он сохранит его как SubType Component.

Вот структура класса (весь код лишен). Как я уже сказал, он не наследует или даже не импортирует пространство имен, ничего связанного с 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; }
    }
}

Спасибо заранее.

4b9b3361

Ответ 1

Если вы хотите сохранить все классы в одном файле, вы можете использовать атрибут [System.ComponentModel.DesignerCategory("Code")] в классе GPSPort, чтобы переопределить поведение по умолчанию. Подробнее, обратите внимание, что вы должны использовать полностью квалифицированный атрибут, даже если у вас есть оператор using System.ComponentModel или VS игнорирует его.

Ответ 2

Предполагаю, что я сказал бы это из-за вашего класса GPSPort, который расширяет SerialPort, который расширяет Component. Попробуйте удалить это (или переместить его в отдельный файл) и посмотреть, исправляет ли он проблему.