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

C# VS 2010将非GUI类文件设置为组件,c#,wpf,visual-studio-2010,C#,Wpf,Visual Studio 2010,对于VisualStudio2010,我有一个烦恼已经发生了很长一段时间了。我有一个我制作的类文件,VS将其保存为类型“Component”,我看不出任何原因。如果我忘记打开文件,它会寻找一个不存在的设计器 我查看了Google,发现VS2005存在一些类似的问题,但这些问题似乎与从GUI组件类(listbox、combobox等)派生有关。这门课不这么做 该文件为GpsUtilities.cs。它出现在csproj文件中,如下所示,子类型为组件的子类型。不存在对该文件的其他引用,也就是说,没有

对于VisualStudio2010,我有一个烦恼已经发生了很长一段时间了。我有一个我制作的类文件,VS将其保存为类型“Component”,我看不出任何原因。如果我忘记打开文件,它会寻找一个不存在的设计器

我查看了Google,发现VS2005存在一些类似的问题,但这些问题似乎与从GUI组件类(listbox、combobox等)派生有关。这门课不这么做

该文件为GpsUtilities.cs。它出现在csproj文件中,如下所示,子类型为
组件的
子类型。不存在对该文件的其他引用,也就是说,没有任何内容声称该文件是
依赖的


组成部分
即使我删除了
子类型
标记,并且即使我显式地将其设置为
代码
而不是
组件
,它仍然将其保存为
组件
子类型

下面是类结构(去掉所有代码)。正如我所说,它不会继承,甚至不会导入任何与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; }
    }
}
使用系统;
使用系统组件模型;
使用System.IO.Ports;
使用System.Text.RegularExpressions;
使用系统计时器;
使用System.Xml.Serialization;
名称空间AppNamespace
{
公共类GpsUtil:INotifyPropertyChanged
{
公共GpsUtil(){}
公共静态GpsUtil CreateInstance(){}
公共bool IsGpsReady{get;}
公共GPSPort GpsSerialPort{get;私有集;}
公共计时器GpsTimer{get;set;}
私有循环数组位置缓冲区{get;set;}
私人gpspositiondatam_GpsCurLoc;
公共GpsPositionData MyLocation{}
公共字符串gpggapatern{get;set;}
公共正则表达式GpggaRegEx{get;set;}
公共GpsPositionData gpsPosSDataFromRegexMatch(匹配gpsRegExMatch){}
公共无效设置GPSPosition(双纬度、双经度){}
私有void gpsTimer_经过(对象发送方,ElapsedEventArgs e){}
私有bool初始化egpsport(){}
公共bool TestGpsPort(){}
公共双计算平方距离(双受惊,双受惊,双受惊,双受惊,双受惊){}
公共事件属性更改事件处理程序属性更改;
}
公共类GPSPort:SerialPort
{
公共GPSPort(字符串portName,int-baudRate=9600):基本(portName,baudRate)
{
}
私有布尔测试结果{get;set;}
公共布尔测试(int interval=3000,bool leavePortOpen=false){}
}
公共枚举GpsFixQuality{Invalid=0,GpsFix=1,DgpsFix=2}
[可序列化]
公共类GpsPositionData
{
公共GpsPositionData(){}
公共GpsPositionData(双纬度、双经度){}
公共重写字符串ToString(){}
公共边界是封闭的(GpsPositionData otherPoint,双公差=0.0001){}
公共GpsPositionData(日期时间、双纬度、双经度、GpsFixQuality固定质量、国际卫星数量、双hdop、双高度、双大地测量间隔、国际GPS、字符串dgpsRefStationId){}
[XmlIgnore]
公共日期时间{get;private set;}
[XmlElement(“纬度”,类型(双))]
公共双纬度{get;set;}
[XmlElement(“经度”,typeof(double))]
公共双经度{get;set;}
[XmlIgnore]
公共GpsFixQuality FixQuality{get;专用集;}
[XmlIgnore]
公共int NumberOfSatellites{get;私有集;}
[XmlIgnore]
公共双Hdop{get;私有集;}
[XmlIgnore]
公共双高度{get;私有集;}
[XmlIgnore]
公共双地理分隔{get;私有集;}
[XmlIgnore]
公共INTAGEOFDPS{get;private set;}
[XmlIgnore]
公共字符串DgpsRefStationId{get;private set;}
}
}

提前谢谢。

我猜这是因为您的
GPSPort
类扩展了
SerialPort
,扩展了
组件。尝试删除该类(或将其移动到单独的文件中),看看它是否解决了问题。

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

它不会直接回答您的问题,但您可以让VS在默认情况下打开所有代码。右键单击文件,用打开,选择“源代码编辑器”(不使用编码!),然后在关闭对话框之前单击“设置为默认值”。实际上,我做了类似于仅以XML形式打开XAML文件的操作。我想要一些更干净一点的东西,所以肯特下面说的是最好的,但谢谢你的投入。这确实解决了问题。谢谢。我遇到了一个类似的问题,
Component
不断地从.csproj文件中添加和删除,这似乎是由于在同一个文件中有其他类型,而派生自
System.ComponentModel.Component
的类型是原因。我把这些类型分成了不同的文件(正如《自然》的意图,也正如你所建议的),现在似乎更快乐了。不是100%相同,但这有助于解决我的问题。谢谢有更好的解决方案!谢谢