簡體   English   中英

從.NET 1.1升級到.NET 2.0,可以期待什么?

[英]Upgrading from .NET 1.1 to .NET 2.0, what to expect?

我正在開發一個大的.NET 1.1項目,並且希望升級它,主要是為了能夠使用更好的工具,如Visual Studio 2008,還因為.NET中的新功能和少量的bug。 2.0框架。

該項目包含VB.NET的大部分內容,但C#中也有部分內容。 它是一個Windows窗體應用程序,使用各種第三方控件。 使用.NET遠程處理,富客戶端與服務器進程通信,該進程與MSSQL 2000數據庫連接。

如果我們決定進行升級,我們可以期待什么樣的問題?

從.Net 2.0開始,對theading模型進行了更改,其中線程中未處理的異常將導致整個應用程序終止。 我在更新一個執行大量線程並偶爾崩潰的應用程序時遇到了這個問題。 顯然.Net 2.0模型更強大,因為你無論如何都應該抓住它們,但這是我在進行遷移時遇到的唯一真正的問題。

本文將討論所有相關內容: http//odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

我們現在正在考慮做同樣的遷移Tobi。 首先,您可以通過制作項目(或其中的一部分)並通過.NET 2.0編譯器進行“干運行”來了解期望的內容。 我的經驗是,2.0編譯器提供了關於1.1編譯器允許滑動的錯誤編程實踐的更多警告。 編譯器將警告您隱式轉換,“模糊”返回路徑(函數不返回值的代碼路徑)以及其他一些小問題。

以下是一些您可能會發現有用的鏈接: .NET Framework兼容性

在.NET Framework 2.0中打破更改的Word文檔

真的沒什么。 你會發現有關過時方法編譯的幾個警告,但通常這些都很容易修復。

你應該拍大,然后去3.5。 這里的水是niiiiiiice。

看一下這篇關於將.NET 2.0應用程序發展到3.5的白皮書 我認為從1.1到2.0的變化更為重要,但過程應該是相似的。

除了上面提到的app配置之外,如果你使用任何XSD驗證,你需要在加載和驗證XML時替換一些代碼。

RESX文件升級問題

注意國際化的RESX文件。

當您在.net 2.0中重新打開net 1.1表單時,RESX文件將升級到新版本。 在.net 1.1中,外語.resx文件僅包含更改。 在.net 2.0中,默認.resx文件中的所有字段現在都被移動到外語resx文件中。 (例如.fr.resx)。 如果您已經將表單國際化,則必須查看所有外語resx文件。

國際化工具

您可能已經使用/編寫自己進行國際化的一些工具可能不再起作用,因為它們可能使用了編號資源。 (Multi Lang&Infragistics)

Infragistics Winforms控件修改.net 1.1中的InitializeForm()並使用資源編號系統訪問資源。 遷移到.net 2.0時,Infragistics資源的編號將在重新生成resx文件時失敗。 您需要升級Infragistics庫。

如果使用app.config存儲程序設置,您將看到的大多數編譯警告。 System.Configuration.ConfigurationManager不推薦使用1.1配置類。

您可能會看到來自編譯器的其他警告將用於未初始化的變量(在變量聲明中將它們設置為“= nothing”或“= null;”以使它們消失),以及未使用的變量(編譯器確定它們是安全刪除)。

大多數代碼仍然應該編譯,除了一些關於過時的東西的警告。

但是,對於Visual Studio生成的代碼,您應該注意一些事項。

如果您在Visual Studio 2003中生成了強類型數據集,則可以忘記在較新版本的Visual Studio中編輯它們。 你必須重建它們或者更好地用nHibernate替換它們以獲得最終的OR-mapper-bliss

表單的設計者仍應使用舊表單。 你可能會感到困惑,因為2005年和2008年在這里使用了部分類。 因此,如果您創建新表單,代碼看起來與舊表單不同。 我從來沒有升級過ASP.Net應用程序所以我不知道網頁表單,但我想它會像winforms一樣工作。 大多數情況下它會起作用,但期望一些設計師的怪異。

.NET 1.1和.NET 2.0-3.5是完全不同的框架,更重要的是,.NET 3.5只是一組額外的程序集,您可以添加到.NET 2.0項目中 - 沒有任何核心程序集實際上已更改,只要我知道 - 以及一個升級的編譯器,它知道稱為LINQ的語法糖,擴展方法等。

換句話說,我不認為.NET 2.0-3.5升級與.NET 1.1-2.0升級非常相似。

事情可能會編譯好,但我們在今年年初升級的應用程序中遇到了一些令人討厭的運行時問題。

首先,當從2.0應用程序調用1.1 webservices時,我們在DateTime對象中遇到了許多時區處理問題,因為在序列化到線路時往返於UTC的轉換似乎在框架版本之間有所不同。

此外,2.0 async webservices使用klutzy基於事件的機制而不是IAsyncResult模式,如果您正在批量處理請求,這將是一種巨大的痛苦。

最后,我們有一些使用Microsoft.mshtml.dll托管嵌入式瀏覽器的遺留代碼。 升級到2.0會導致應用程序以靜默方式切換到該dll的較新版本,該版本具有與javascript交互相關的一些更改行為。 最后一個是一個不起眼的案例,但表明遷移到較新的運行時可能會影響您可能擁有的任何COM交互。

希望這可以幫助!

我們做電子郵件的方式必須改變。 1.1版本使用了system.WEB.mail,用

    Imports System.Web.Mail
    '
    Dim message As New MailMessage' this is a web.mail msg, not a net.mail msg
    Dim objConn As SmtpMail
    Dim objAttach As MailAttachment
        '
    message .From = "From@us.com"
       ' more properties assigned to objMail
    objAttach = New MailAttachment(ExportName)
    message.Attachments.Add(objAttach)
       ' Here's where we actually send the thing
    SmtpMail.SmtpServer.Insert(0, "127.0.0.1")
    objConn.Send(objMail)

而新的有system.NET.mail

         Imports System.Net.Mail
        '
         Dim message as MailMessage ' this is a net.mail msg, not a web.mail msg
         Dim data As Attachment
        Dim client As New SmtpClient("127.0.0.1")
    '
        data = New Attachment(ExportName)
    ' Create the message and add the attachment
        message = New MailMessage(EmailFrom, EmailTo, reportDescription)
        message.Attachments.Add(data)
' Send the message
        client.Send(message)

不應該有太多的問題,因為在理論上它是向后兼容的(我注意到MikeeMike關於線程異常的評論)。 移動之后,你會很好,有很多好東西,如泛型。 雖然您不希望一下子將所有集合移植到泛型,但是一旦完成此操作,您的代碼應該更加可靠,因為演員陣容數量減少 - 並且可能更快(盡管里程可能會有所不同) 。 目前,我即將開始對我的三個產品進行.NET 2 - > .NET 4轉換。 主要優點是多線程支持(並行foreach循環等)的進一步改進。

您可能不會遇到任何破壞性問題,但您可能會收到一些已棄用的方法警告。 編譯器通常應該告訴您更換的內容。 我知道一些System.Configuration事情已經更新。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM