2011-02-27 94 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項目並將其複製到它。

相關問題