2008-09-11 13 views
8

मैं एक बड़ी .NET 1.1 प्रोजेक्ट पर काम कर रहा हूं, और इसे अपग्रेड करने की इच्छा मौजूद है, मुख्य रूप से विजुअल स्टूडियो 2008 जैसे बेहतर टूल का उपयोग करने में सक्षम होने के लिए, बल्कि नई सुविधाओं और छोटी संख्या में बग्स के कारण भी .NET 2.0 ढांचा।.NET 1.1 से .NET 2.0 तक अपग्रेड करना, क्या उम्मीद करनी है?

इस परियोजना में वीबीएनईटी के बड़े हिस्से के लिए शामिल है, लेकिन सी # में भी कुछ भाग हैं। यह विभिन्न तृतीय पक्ष नियंत्रणों का उपयोग करते हुए एक विंडोज फॉर्म एप्लिकेशन है। समृद्ध क्लाइंट को सर्वर प्रक्रिया में बातचीत करने वाले .NET को .NET का उपयोग करना जो MSSQL 2000 डेटाबेस के साथ इंटरफेस करता है।

अगर हम अपग्रेड करने का निर्णय लेते हैं तो हम किस तरह के मुद्दों की उम्मीद कर सकते हैं?

उत्तर

2

कुछ भी नहीं, वास्तव में। अप्रचलित विधियों के बारे में आपको संकलन पर कुछ चेतावनियां मिलेंगी, लेकिन अक्सर वे ठीक करने के लिए तुच्छ हैं।

आपको बड़ी गोली मारनी चाहिए और 3.5 के लिए जाना चाहिए। यहां पानी niiiiiiice है।

0

आपके पास शायद ब्रेकिंग नहीं होगा, हालांकि आपको कुछ बहिष्कृत विधि चेतावनियां मिल सकती हैं। संकलक आमतौर पर आपको बताएगा कि प्रतिस्थापन क्या है। मुझे पता है कि कुछ सिस्टम। कॉन्फ़िगरेशन चीजें अपडेट की गई थीं।

1

सबसे संकलन चेतावनियां आप देखेंगे यदि आप प्रोग्राम सेटिंग्स को स्टोर करने के लिए app.config का उपयोग करते हैं। 1.1 कॉन्फ़िगरेशन क्लास को सिस्टम के लिए बहिष्कृत किया गया था। कॉन्फ़िगरेशन। कॉन्फ़िगरेशन प्रबंधक।

कंपाइलर से आने वाली अन्य चेतावनियां अनियमित चर के लिए होंगी (उन्हें "= कुछ भी नहीं" या "= null;" पर सेट करने के लिए वेरिएबल घोषणा में सेट करें), और अप्रयुक्त चर (कंपाइलर है सुनिश्चित करें कि वे हटाने के लिए सुरक्षित हैं)।

2

3.5 पर एक .NET 2.0 अनुप्रयोग विकसित करने पर इस whitepaper पर एक नज़र डालें। मुझे लगता है कि 1.1 से 2.0 के बदलाव अधिक महत्वपूर्ण हैं, लेकिन प्रक्रिया समान होनी चाहिए।

1

सामग्री के अप्रचलित होने के बारे में कुछ चेतावनियों को छोड़कर अधिकांश कोड अभी भी संकलित होना चाहिए।

लेकिन विजुअल स्टूडियो जेनरेट कोड के संबंध में आपको कुछ चीजें देखने चाहिए।

यदि आपने विजुअल स्टूडियो 2003 में दृढ़ता से टाइप किए गए डेटासेट जेनरेट किए हैं तो आप दृश्य स्टूडियो के नए संस्करणों में उन्हें संपादित करने के बारे में भूल सकते हैं। आपको उन्हें पुनर्निर्माण करना होगा या बेहतर उन्हें केवल ओआर-मैपर-ब्लिज़

फ़ॉर्म के लिए डिज़ाइनर को पुराने रूपों के साथ काम करना चाहिए। आप कुछ भ्रम प्राप्त कर सकते हैं हालांकि 2005 और 2008 यहां आंशिक कक्षाओं का उपयोग करते हैं। तो यदि आप नए फॉर्म बनाते हैं तो कोड पुराने लोगों से अलग दिखता है। मैंने कभी भी एएसपी.Net एप्लिकेशन को अपग्रेड नहीं किया है, इसलिए मुझे वेब-फॉर्म के बारे में पता नहीं है, लेकिन मुझे लगता है कि यह Winforms सामान के समान काम करेगा। ज्यादातर यह काम करेगा लेकिन कुछ डिजाइनर अजीबता की उम्मीद है।

5

हम अभी भी उसी प्रवासन को देख रहे हैं टोबी। सबसे पहले, आप अपने प्रोजेक्ट (या इसके एक हिस्से) की एक प्रति बनाकर क्या उम्मीद कर सकते हैं इसका एक अच्छा विचार प्राप्त कर सकते हैं और इसे .NET 2.0 कंपाइलर के माध्यम से "सूखा रन" दे सकते हैं। इसके साथ मेरा अनुभव यह था कि 2.0 कंपाइलर खराब प्रोग्रामिंग प्रथाओं के बारे में अधिक चेतावनियां देता है जो 1.1 कंपाइलर स्लाइड करते हैं। कंपाइलर आपको अंतर्निहित जानवरों के बारे में चेतावनी देगा, "संदिग्ध" वापसी पथ (एक कोड पथ जहां कोई फ़ंक्शन कोई मान नहीं देता है), और कुछ अन्य मामूली चीजें।

यहाँ कुछ लिंक है कि आप उपयोगी हो सकती है: .NET Framework Compatability

Word Document of Breaking changes in .NET Framework 2.0

2

एप्लिकेशन विन्यास सामान ऊपर उल्लेख किया है के अलावा, अगर आप किसी भी XSD सत्यापन का उपयोग आप लदान के आसपास कुछ कोड को बदलने के लिए की आवश्यकता होगी और एक्सएमएल को मान्य करना।

1

.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 अपग्रेड।

8

.NET 2.0 के बाद वाले मॉडल में एक बदलाव है जहां थ्रेड में अनचाहे अपवाद पूरे ऐप को समाप्त कर देगा। मैं उस ऐप को अपडेट करते समय इसमें भाग गया जिसने बहुत सारे थ्रेडिंग किए और कभी-कभी दुर्घटनाग्रस्त हो गया। जाहिर है, नेट 2.0 मॉडल अधिक मजबूत है क्योंकि आपको निश्चित रूप से इन्हें पकड़ना चाहिए, लेकिन माइग्रेशन करते समय यह एकमात्र वास्तव में मुद्दा था।

यह लेख इसके बारे में सब बात करती है: http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

1

हालात शायद ठीक संकलन होगा, लेकिन हम हम साल के शुरू में उन्नत किया एक आवेदन के साथ कुछ बुरा क्रम मुद्दों था।

सबसे पहले, हमारे पास 2.0 अनुप्रयोगों से 1.1 वेब सर्विसेज को कॉल करते समय डेटटाइम ऑब्जेक्ट्स में टाइमज़ोन हैंडलिंग के साथ कई समस्याएं थीं, जब यूटीसी से रूपांतरण और फ्रेम के संस्करणों के बीच अलग-अलग काम करने के लिए यूटीसी से रूपांतरण किया गया था।

इसके अलावा, 2.0 एसिंक वेबसाइसेस IAsyncResult पैटर्न के बजाय klutzy ईवेंट-आधारित तंत्र का उपयोग करते हैं, जो आपके अनुरोधों को बैच कर रहे हैं तो शाही दर्द है।

अंत में, हमारे पास कुछ विरासत कोड था जो Microsoft.mshtml.dll का उपयोग करके एम्बेडेड ब्राउज़र होस्ट करता था। 2.0 तक अपग्रेड करने से एप्लिकेशन को उस डीएल के नए संस्करण पर चुपचाप स्विच करने का कारण बन गया, जिसमें कुछ जावास्क्रिप्ट इंटरैक्शन से संबंधित व्यवहार बदल गया था। यह आखिरी वाला एक अस्पष्ट मामला है, लेकिन दिखाता है कि नए रनटाइम में जाने से आपके पास किसी भी COM इंटरैक्शन के प्रभाव हो सकते हैं।

आशा है कि इससे मदद मिलती है!

1

जिस तरह से हम ईमेल कर रहे थे उसे बदलना पड़ा। 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 = "[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) 

साथ और नया एक 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

RESX फ़ाइलों समस्याओं

उन्नयन अंतर्राष्ट्रीय RESX फ़ाइलों से सावधान रहें है।

जब आप एक को फिर से खोलते हैं, .NET 2.0 में शुद्ध 1.1 फॉर्म RESX फ़ाइल को एक नए संस्करण में अपग्रेड किया जाता है। .NET 1.1 में विदेशी भाषा .resx फ़ाइल में केवल परिवर्तन शामिल हैं। .NET 2.0 में डिफ़ॉल्ट .resx फ़ाइल में सभी फ़ील्ड अब विदेशी भाषा resx फ़ाइल में स्थानांतरित हो जाते हैं। (उदाहरण के लिए .fr.resx)।यदि आप पहले ही फॉर्म को अंतर्राष्ट्रीयकृत कर चुके हैं तो सभी विदेशी भाषा resx फ़ाइलों को देखना होगा।

अंतर्राष्ट्रीयकरण उपकरण

कुछ उपकरण है कि आप का इस्तेमाल किया हो सकता है/लिखा खुद के अंतर्राष्ट्रीयकरण करने के लिए एन जन अब और काम नहीं कर सकता के रूप में वे गिने संसाधनों का इस्तेमाल किया हो सकता है। (मल्टी लैंग & इन्फ्राजिस्टिक्स)

इन्फ्राजिस्टिक्स विनफॉर्म नियंत्रण .नेट 1.1 में InitializeForm() को संशोधित करता है और संसाधन संख्या प्रणाली का उपयोग करके संसाधनों तक पहुंच प्रदान करता है। .NET 2.0 पर माइग्रेट किए जाने पर इन्फ्राजिस्टिक्स संसाधनों की संख्या विफल हो जाएगी क्योंकि resx फ़ाइल पुन: उत्पन्न होती है। आपको अपनी इन्फ्राजिस्टिक्स लाइब्रेरी को अपग्रेड करना होगा।

0

सिद्धांत में बहुत अधिक समस्या नहीं होनी चाहिए क्योंकि सिद्धांत में यह पिछड़ा संगत है (मैं थ्रेड अपवादों के बारे में माइकमेइक की टिप्पणी को नोट करता हूं)। चाल के बाद, आप ठीक करेंगे जैसे जेनेरिक जैसी कुछ अच्छी चीजें हैं। यद्यपि आप अपने सभी संग्रहों को सामान्य रूप से जेनिक्स में बंद नहीं करना चाहते हैं, एक बार झुकाव हो जाने के बाद, एक बार जब आप यह कर लेंगे तो आपके कोड को कम संख्या में जानवरों की वजह से अधिक विश्वसनीय होना चाहिए - और शायद तेज़ (हालांकि इस पहलू में माइलेज भिन्न हो सकता है) । फिलहाल मैं अपने तीन उत्पादों के .NET 2 -> .NET 4 रूपांतरण को शुरू करने वाला हूं। मुख्य लाभ बहु थ्रेडेड समर्थन (समानांतर foreach loops, आदि) में और सुधार होगा।