C# VS 2010将非GUI类文件设置为组件
对于VisualStudio2010,我有一个烦恼已经发生了很长一段时间了。我有一个我制作的类文件,VS将其保存为类型“Component”,我看不出任何原因。如果我忘记打开文件,它会寻找一个不存在的设计器 我查看了Google,发现VS2005存在一些类似的问题,但这些问题似乎与从GUI组件类(listbox、combobox等)派生有关。这门课不这么做 该文件为GpsUtilities.cs。它出现在csproj文件中,如下所示,子类型为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文件中,如下所示,子类型为组件的子类型。不存在对该文件的其他引用,也就是说,没有
组件的子类型。不存在对该文件的其他引用,也就是说,没有任何内容声称该文件是依赖的
组成部分
即使我删除了子类型
标记,并且即使我显式地将其设置为代码
而不是组件
,它仍然将其保存为组件
的子类型
下面是类结构(去掉所有代码)。正如我所说,它不会继承,甚至不会导入任何与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%相同,但这有助于解决我的问题。谢谢有更好的解决方案!谢谢