2008-09-11 25 views
8

Tôi đang làm việc trên một dự án lớn .NET 1.1, và có một mong muốn nâng cấp điều này, chủ yếu để có thể sử dụng các công cụ tốt hơn như Visual Studio 2008, mà còn vì các tính năng mới và số lượng lỗi nhỏ hơn trong .NET 2.0 framework.Nâng cấp từ .NET 1.1 lên .NET 2.0, điều gì sẽ xảy ra?

Dự án bao gồm phần lớn hơn của VB.NET, nhưng cũng có các phần trong C#. Nó là một ứng dụng Windows Forms, sử dụng các điều khiển bên thứ ba khác nhau. Sử dụng .NET remoting các cuộc đàm phán khách hàng phong phú cho một quá trình máy chủ mà giao diện với một cơ sở dữ liệu MSSQL 2000.

Chúng tôi có thể mong đợi những vấn đề nào trong trường hợp chúng tôi quyết định thực hiện nâng cấp?

Trả lời

2

Không có gì, thực sự. Bạn sẽ tìm thấy một vài cảnh báo về việc biên dịch về các phương pháp lỗi thời, nhưng thường là những cách nhỏ nhặt để khắc phục.

Bạn nên chụp lớn và đi đến 3,5. Nước là niiiiiiice ở đây.

0

Có thể bạn sẽ không gặp bất kỳ sự cố nào vi phạm, mặc dù bạn có thể nhận được một số cảnh báo phương pháp không dùng nữa. Trình biên dịch nói chung nên cho bạn biết những gì thay thế là mặc dù. Tôi biết rằng một số điều System.Configuration đã được cập nhật.

1

Cảnh báo biên dịch nhất bạn sẽ thấy là nếu bạn sử dụng app.config để lưu cài đặt chương trình. Lớp cấu hình 1.1 không được chấp nhận cho System.Configuration.ConfigurationManager.

Cảnh báo khác bạn có thể thấy từ trình biên dịch sẽ là cho các biến chưa được khởi tạo (đặt chúng thành "= none" hoặc "= null;" trong khai báo biến để làm cho chúng biến mất), và biến không sử dụng (trình biên dịch là chắc chắn chúng an toàn để xóa).

2

Xem nhanh tại whitepaper về việc phát triển ứng dụng .NET 2.0 thành 3.5. Tôi giữ rằng những thay đổi từ 1,1 đến 2,0 là quan trọng hơn, nhưng quá trình này phải tương tự.

1

Hầu hết mã vẫn nên biên dịch trừ một vài cảnh báo về nội dung đang lỗi thời.

Nhưng có một vài điều bạn nên xem xét đối với mã Visual Studio được tạo.

Nếu bạn đã tạo bộ dữ liệu được nhập mạnh mẽ trong Visual Studio 2003, bạn có thể quên chỉnh sửa chúng trong các phiên bản mới hơn của studio trực quan. Bạn sẽ phải xây dựng lại chúng hoặc tốt hơn chỉ thay thế chúng bằng một cái gì đó như nHibernate cho cuối cùng OR-mapper-bliss

Nhà thiết kế cho biểu mẫu vẫn hoạt động với các biểu mẫu cũ. Bạn có thể nhận được một số nhầm lẫn mặc dù bởi vì năm 2005 và 2008 sử dụng các lớp học một phần ở đây. Vì vậy, nếu bạn tạo biểu mẫu mới, mã trông khác với mã cũ. Tôi chưa bao giờ nâng cấp ứng dụng ASP.Net vì vậy tôi không biết về biểu mẫu web nhưng tôi đoán nó sẽ hoạt động giống như công cụ winforms. Chủ yếu là nó sẽ làm việc nhưng mong đợi một số kỳ lạ thiết kế.

5

Chúng tôi đang xem xét việc thực hiện di chuyển tương tự ngay bây giờ Tobi. Đầu tiên, bạn có thể có được một ý tưởng tốt về những gì mong đợi bằng cách tạo một bản sao của dự án của bạn (hoặc một phần của nó) và cung cấp cho nó một "chạy khô" thông qua trình biên dịch .NET 2.0. Kinh nghiệm của tôi với điều này là trình biên dịch 2.0 cho nhiều cảnh báo hơn về các thực hành lập trình xấu mà trình biên dịch 1.1 cho phép trượt. Trình biên dịch sẽ cảnh báo bạn về các phôi ẩn, các đường dẫn trả về "không rõ ràng" (một đường dẫn mã trong đó một hàm không trả về một giá trị), và một số thứ nhỏ khác.

Dưới đây là một số liên kết mà bạn có thể thấy hữu ích: .NET Framework Compatability

Word Document of Breaking changes in .NET Framework 2.0

2

Ngoài những thứ cấu hình ứng dụng nêu trên, nếu bạn sử dụng bất kỳ xác nhận XSD bạn sẽ cần phải thay thế một số mã xung quanh bốc và xác thực XML.

1

.NET 1.1 và .NET 2.0-3.5 là các khung công tác hoàn toàn khác nhau, và quan trọng hơn, .NET 3.5 chỉ là một tập hợp các assembly bổ sung mà bạn có thể thêm vào dự án .NET 2.0 của bạn - không có assembly nào thực sự thay đổi , theo như tôi biết - và trình biên dịch được nâng cấp biết về đường cú pháp được gọi là LINQ, phương pháp mở rộng, v.v.

Nói cách khác, tôi không nghĩ rằng bản nâng cấp .NET 2.0-3.5 rất giống với nâng cấp .NET 1.1-2.0.

8

Có thay đổi đối với mô hình theading trong .Net 2.0 trở đi khi các ngoại lệ chưa được xử lý trong chuỗi sẽ làm cho toàn bộ ứng dụng chấm dứt. Tôi chạy vào điều này khi cập nhật một ứng dụng đã thực hiện rất nhiều luồng và đôi khi bị lỗi. Rõ ràng mô hình .Net 2.0 mạnh mẽ hơn khi bạn chắc chắn sẽ bắt được những thứ này, nhưng đó là vấn đề thực sự duy nhất tôi gặp phải khi thực hiện di chuyển.

Bài viết này nói tất cả về nó: http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

1

Những điều có thể sẽ biên dịch OK, nhưng chúng tôi đã có một vài vấn đề thời gian chạy khó chịu với một ứng dụng chúng tôi nâng cấp vào đầu năm nay. Đầu tiên, chúng tôi có một số vấn đề với xử lý múi giờ trong đối tượng DateTime khi gọi 1.1 webservices từ ứng dụng 2.0, khi chuyển đổi đến và từ UTC khi tuần tự hóa thành dây xuất hiện hoạt động khác nhau giữa các phiên bản khung công tác.

Ngoài ra, 2.0 dịch vụ web không đồng bộ sử dụng cơ chế dựa trên sự kiện klutzy thay vì mẫu IAsyncResult, đây là nỗi đau của hoàng gia nếu bạn đang xử lý các yêu cầu của mình.

Cuối cùng, chúng tôi đã có một số mã cũ đã lưu trữ trình duyệt được nhúng bằng Microsoft.mshtml.dll. Nâng cấp lên 2.0 khiến ứng dụng lặng lẽ chuyển sang phiên bản dll mới hơn, có một số hành vi đã thay đổi liên quan đến tương tác javascript. Điều cuối cùng này là một trường hợp ít người biết đến, nhưng cho thấy việc chuyển sang thời gian chạy mới hơn có thể có tác động đối với bất kỳ tương tác COM nào bạn có thể có.

Hy vọng điều này sẽ hữu ích!

1

Cách chúng tôi đang thực hiện email phải thay đổi. Phiên bản 1.1 sử dụng System.Web.Mail, với

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 = "[email protected]" 
     ' 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) 

và cái mới có 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) 
1

file RESX nâng cấp vấn đề

Xem ra cho các tập tin RESX được quốc tế hóa.

Khi bạn mở lại, biểu mẫu 1.1 ròng trong .net 2.0, tệp RESX sẽ được nâng cấp lên phiên bản mới. Trong .net 1.1, ngoại ngữ .resx chỉ chứa các thay đổi. Trong .net 2.0 TẤT CẢ các trường trong tệp .resx mặc định hiện được chuyển vào tệp resx ngôn ngữ nước ngoài. (ví dụ: .fr.resx).Nếu bạn đã quốc tế hóa các hình thức tất cả các tập tin resx ngôn ngữ nước ngoài sẽ phải được xem xét.

cụ Quốc tế hóa

Một số công cụ mà bạn có thể đã sử dụng/ghi cho mình để làm quốc tế hóa en khối lượng có thể không có tác dụng nữa vì chúng có thể đã sử dụng các nguồn tài nguyên số. (Multi Lang & Infragistics)

Infragistics Điều khiển Winforms sửa đổi InitializeForm() trong .net 1.1 và truy cập tài nguyên bằng cách sử dụng hệ thống đánh số tài nguyên. Khi di chuyển sang .net 2.0, việc đánh số các tài nguyên Infragistics sẽ thất bại khi tệp resx được tạo lại. Bạn sẽ cần phải nâng cấp thư viện Infragistics của bạn.

0

Không nên quá nhiều vấn đề vì lý thuyết nó tương thích ngược (tôi lưu ý nhận xét của MikeeMike về ngoại lệ của chuỗi). Sau khi di chuyển, bạn sẽ tốt có khá một vài điều tốt đẹp như generics. Mặc dù bạn không muốn chuyển tất cả các bộ sưu tập của bạn thành một khối, nhưng khi bạn đã thực hiện xong, mã của bạn sẽ đáng tin cậy hơn do số lượng phôi giảm - và có thể nhanh hơn (mặc dù số dặm có thể thay đổi theo khía cạnh này) . Tại thời điểm này tôi sắp bắt đầu chuyển đổi .NET 2 -> .NET 4 của ba sản phẩm của tôi. Ưu điểm chính sẽ là cải tiến hơn nữa trong hỗ trợ đa luồng (vòng lặp foreach song song, v.v.).

Các vấn đề liên quan