VS 2010 установка файла класса без графического интерфейса в качестве компонента - PullRequest
29 голосов
/ 06 июня 2011

У меня есть раздражение, которое происходит в течение довольно долгого времени с 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; }
    }
}

Заранее спасибо.

Ответы [ 2 ]

32 голосов
/ 08 августа 2012

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

15 голосов
/ 06 июня 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...