2011-02-27 141 views
2

我在.net 3.5(VS c#express)中创建了这个Windows窗体应用程序。 现在我想转换它,以便它可以在只安装.net 2.0的情况下运行。所以在我的项目属性中:我选择“目标框架”为2.0,修正了我得到的错误。我的应用程序不会在.net 2.0下运行,在3.5上运行

之后,该应用程序运行正常,安装.net 3.0,但不会运行在全新安装的xp与.net 2.0安装。 “应用程序崩溃,发送错误报告” 我该怎么办?我想要这个东西在2.0下运行。

这里是代码:

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Text; 
using System.Windows.Forms; 
using System.IO; 
using System.Net; 
using System.Xml; 
using System.Runtime.InteropServices; 
using Microsoft.Win32; 

namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 

     int numberOfMatches = 0; 

     string[,] data; 
     bool update = true ; 
     string fileToParse = Path.GetTempPath() + "cricketfile.xml"; 
     int matchToShow = 0; 
     bool showschedule = true ; 

     public const int WM_NCLBUTTONDOWN = 0xA1; 
     public const int HT_CAPTION = 0x2; 

     [DllImportAttribute("user32.dll")] 
     public static extern int SendMessage(IntPtr hWnd, 
         int Msg, int wParam, int lParam); 
     [DllImportAttribute("user32.dll")] 
     public static extern bool ReleaseCapture(); 

     RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true); 

     public Form1() 
     { 

      InitializeComponent(); 

      if (Environment.OSVersion.Version.Major <= 5) 
      { 
       // MessageBox.Show("xp"); 
      } 
      else 
      { 
       label1.Top = 1; 
       pictureBox1.Top = 1; 
      } 
      // label1.Left = 1; 
      int X = System.Windows.Forms.Screen.PrimaryScreen.Bounds.Width/2 - this.Width/2; 
      this.Location = new System.Drawing.Point(X, -5); 


      if (rkApp.GetValue("cricketscore") == null) 
      { 
       startWithWindowsToolStripMenuItem.Checked = false ; 
      } 
      else 
      { 
       startWithWindowsToolStripMenuItem.Checked = true ; 
      } 
      this.Region = new Region(new Rectangle(10, 10, 197, 17)); 
      ToolTip tooltip = new ToolTip(); 
//   MessageBox.Show(" F" + tooltip.AutomaticDelay); 
      tooltip.AutomaticDelay = 0; 
      tooltip.InitialDelay = 0; 
      tooltip.SetToolTip(pictureBox1, " right click for settings, left click to move"); 
      tooltip.SetToolTip(label1, " right click for settings, left click to move"); 
      fetchData(); 
      addContextEntries(); 
      chooseIndia(); 
      updateScore(); 

      // MessageBox.Show(data.GetLength(0).ToString()); 


      //foreach (string s in data) 
      //{ 
      // Console.WriteLine(s); 
      //} 

      timer1.Interval = 20 * 1000; 
      timer1.Enabled = true; 

     } 
     public void addContextEntries() 
     { 
      // MessageBox.Show("num- " + numberOfMatches); 
      List<ToolStripMenuItem> Mylist1 = new List<ToolStripMenuItem>(); 
      for (int i = 0; i < numberOfMatches; i++) 
      { 
       Mylist1.Add(new ToolStripMenuItem()); 
       this.contextMenuStrip1.Items.Add(Mylist1[i]); 
       Mylist1[i].Text = "See Match " + (i + 1) + "'s score"; 
       switch(i) 
       { 
        case 0: 
         Mylist1[i].Click += new System.EventHandler(this.match1); 
         break; 
        case 1: 
         Mylist1[i].Click += new System.EventHandler(this.match2); 
         break; 
        case 2: 
         Mylist1[i].Click += new System.EventHandler(this.match3); 
         break; 
        case 3: 
         Mylist1[i].Click += new System.EventHandler(this.match4); 
         break; 
        case 4: 
         Mylist1[i].Click += new System.EventHandler(this.match5); 
         break; 
       } 

      } 

     } 
     public void match1(object sender, EventArgs e) 
     { 
      // MessageBox.Show("match 1"); 
      matchToShow = 0; 
      label1.Text = data[0, 0] + " " + data[0, 1]; 


     } 
     public void match2(object sender, EventArgs e) 
     { 
      // MessageBox.Show("match 2"); 
      matchToShow = 1; 
      label1.Text = data[1, 0] + " " + data[1, 1]; 

     } 
     public void match3(object sender, EventArgs e) 
     { 
      matchToShow = 2; 
      label1.Text = data[2, 0] + " " + data[2, 1]; 

     } 
     public void match4(object sender, EventArgs e) 
     { 
      matchToShow = 3; 
      label1.Text = data[3, 0] + " " + data[3, 1]; 

     } 
     public void match5(object sender, EventArgs e) 
     { 
      matchToShow = 4; 
      label1.Text = data[4, 0] + " " + data[4, 1]; 

     } 

     public void chooseIndia() 
     { 
      try 
      { 
       for (int i = 0; i < data.GetLength(0); i++) 
       { 
        // MessageBox.Show("i - " + i); 
        if (data[i, 3].ToLower().Contains("india")) 
        { 
         matchToShow = i; 
         // MessageBox.Show("i - " + i); 
         break; 
        } 
       } 
      } 
      catch (NullReferenceException ne) 
      { 

      } 
     } 
     public void updateScore() 
     { 
      fetchData(); 
      if (update == true) 
      { 
       try 
       { 
        label1.Text = data[matchToShow, 0] + " " + data[matchToShow, 1]; 
       } 
       catch (Exception e) 
       { 

       } 
      } 
     } 

     public void fetchData() 
     { 
      int matchnumber = -1; 
      numberOfMatches = 0; 
      WebClient Client = new WebClient(); 
      try 
      { 
       Client.DownloadFile("http://synd.cricbuzz.com/score-gadget/gadget-scores-feed.xml", fileToParse); 
      } 
      catch (WebException we) 
      { 
       // if (we.ToString().ToLower().Contains("connect to")) 
       // MessageBox.Show("sdf"); 
        label1.Text = "No Internet"; 
        update = false ; 
        this.Update(); 
        // System.Threading.Thread.Sleep(1000); 

      } 
      try 
      { 
       XmlTextReader xmlreader0 = new XmlTextReader(fileToParse); 
       while (xmlreader0.Read()) 
       { 
        if (xmlreader0.Name.ToString() == "match" && xmlreader0.NodeType == XmlNodeType.Element) 
        { 
         ++numberOfMatches; 
        } 
       } 
       data = new string[numberOfMatches, 4]; 
       // numberOfMatches = 0; 
       // MessageBox.Show("matchnumbers - " + numberOfMatches); 
       // MessageBox.Show("asd"); 
       XmlTextReader xmlreader = new XmlTextReader(fileToParse); 
       while (xmlreader.Read()) 
       { 
        // MessageBox.Show("READING"); 
        if (xmlreader.Name.ToString() == "header" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         xmlreader.Read(); 

         data[matchnumber, 0] = xmlreader.Value; 
         // MessageBox.Show(xmlreader.Value); 
        } 


        if (xmlreader.Name == "description" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         // MessageBox.Show(xmlreader.Value); 
         xmlreader.Read(); 
         // MessageBox.Show("matched - " + xmlreader.Value); 
         data[matchnumber, 1] = xmlreader.Value; 
        } 

        if (xmlreader.Name == "url-text" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         xmlreader.Read(); 
         // MessageBox.Show(xmlreader.Value); 
         data[matchnumber, 2] = xmlreader.Value; 
        } 

        if (xmlreader.Name == "url-link" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         xmlreader.Read(); 
         data[matchnumber, 3] = xmlreader.Value; 
        } 

        if (xmlreader.Name.ToString() == "match" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         matchnumber++; 
         showFullScorecardToolStripMenuItem.Text = "Show full scorecard"; 
         showschedule = true; 
         update = true; 
        } 
        if (xmlreader.Name.ToString() == "nextlive" && xmlreader.NodeType == XmlNodeType.Element) 
        { 
         label1.Text = "No current match"; 
         showFullScorecardToolStripMenuItem.Text = "Show Schedule"; 
         showschedule = false; 
         update = false; 
         break; 
        } 

       } 
       xmlreader.Close(); 
       xmlreader0.Close(); 
      } 
      catch (FileNotFoundException fe) 
      { 
       // MessageBox.Show("no internet"); 
      } 

     } 
     private void timer1_Tick(object sender, EventArgs e) 
     { 
      updateScore(); 
     } 

     private void Form1_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       ReleaseCapture(); 
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
      } 
     } 

     private void pictureBox1_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       ReleaseCapture(); 
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
      } 
     } 

     private void exitToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      Application.Exit(); 
     } 

     private void switchColrosToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      if (label1.ForeColor == System.Drawing.Color.Black) 
       label1.ForeColor = System.Drawing.Color.White ; 
      else 
       label1.ForeColor = System.Drawing.Color.Black; 
     } 

     private void startWithWindowsToolStripMenuItem_Click(object sender, EventArgs e) 
     { 

     } 

     private void startWithWindowsToolStripMenuItem_CheckStateChanged(object sender, EventArgs e) 
     { 
      if (startWithWindowsToolStripMenuItem.Checked == true) 
      { 
       rkApp.SetValue("cricketscore", Application.ExecutablePath.ToString()); 
      } 
      else 
      { 
       rkApp.DeleteValue("cricketscore", false); 
      } 
     } 

     private void showFullScorecardToolStripMenuItem_Click(object sender, EventArgs e) 
     { 
      if (showschedule == true) 
       System.Diagnostics.Process.Start(data[matchToShow, 3]); 
      else 
       System.Diagnostics.Process.Start("http://www.cricbuzz.com/component/cricket_schedule/"); 
     } 

     private void label1_MouseDown(object sender, MouseEventArgs e) 
     { 
      if (e.Button == MouseButtons.Left) 
      { 
       ReleaseCapture(); 
       SendMessage(Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0); 
      } 
     } 

     //public void findNumberOfMatches() 
     //{ 
     // if (xmlreader.Name.ToString() == "match" && xmlreader.NodeType == XmlNodeType.Element) 
     // { 
     //  matchnumber++; 
     // } 
     //} 
    } 
} 

感谢

+11

吞咽异常导致疯狂。不要捕捉异常并且什么都不做,你应该让它传播到堆栈中。您可以尝试通过记录您获得的异常来缩小发生的情况,包括使其达到程序顶层(在Program.cs中)的异常。 – 2011-02-27 06:03:38

+0

好的,我会试试这个。谢谢 – 2011-02-27 06:11:11

+4

你还没有包含最重要的信息。源代码不是问题,因为你暗示它在.NET 2下编译。**你的应用程序没有运行?这个表单是否显示出来?您看到什么消息,事件查看器中包含什么,您尝试了哪些其他操作系统? – 2011-02-27 06:48:11

回答

1

将关闭看起来并不像需要升级的框架,但让我们看看那些方式:

  • 尝试测试它在.NET 2.0下安装了最新的.NET 2.0 Service Pack

  • 试着检查项目中的引用是否对.NET 2.0都是干净的,有时候这种做法不正确。按每个具有2.0和3.x版本的程序集的F4以查看属性并确认(并在需要时删除/添加)。如果你看到任何类似LINQ的东西,就需要删除它。

  • 试着带上Visual C#2005 Express或类似的代码,看看代码是否在它下面编译。或者创建新的.NET 2.0项目并将其复制到它。

相关问题