VS 2010将非GUI类文件设置为组件

本文关键字:设置 组件 文件 2010 将非 GUI VS | 更新日期: 2023-09-27 17:58:35

我对Visual Studio 2010有一段时间的烦恼。我有一个我制作的类文件,VS将其保存为类型"Component",我无法识别任何原因。如果我忘记并试图打开文件,它会查找不存在的设计器。

我在谷歌上发现了VS2005的一些类似问题,但这些问题似乎与从GUI组件类(listbox、combobox等)派生有关。这个类不做那个。

文件名为GpsUtilities.cs。它在csproj文件中显示如下,SubTypeComponent。不存在对该文件的其他引用,即没有任何内容将其声明为DependentUpon

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

即使我删除了SubType标记,即使我明确地将其设置为Code而不是Component,它仍然将其保存为ComponentSubType

这是类结构(去掉所有代码)。正如我所说,它不继承,甚至不导入任何与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; }
    }
}

提前谢谢。

VS 2010将非GUI类文件设置为组件

如果要将所有类保存在一个文件中,可以使用GPSPort类上的[System.ComponentModel.DesignerCategory("Code")]属性来覆盖默认行为。详细信息请注意,即使您有using System.ComponentModel语句,也必须使用完全限定属性,否则VS将忽略它。

我猜想,这是由于您的GPSPort类,它扩展了SerialPort,它扩展Component。试着删除它(或者将它移到一个单独的文件中),看看它是否解决了问题。