8

私は大規模な .NET 1.1 プロジェクトに取り組んでおり、主に Visual Studio 2008 のようなより優れたツールを使用できるようにするためだけでなく、.NET の新機能と少量のバグのために、これをアップグレードしたいという要望があります。 2.0 フレームワーク。

プロジェクトは VB.NET の大部分で構成されていますが、C# の部分もあります。これは、さまざまなサード パーティ製のコントロールを使用する Windows フォーム アプリケーションです。リッチ クライアントは、.NET リモート処理を使用して、MSSQL 2000 データベースとインターフェイスするサーバー プロセスと対話します。

アップグレードを実行することにした場合、どのような問題が予想されますか?

4

13 に答える 13

8

.Net 2.0 以降では、スレッド内の未処理の例外によってアプリ全体が終了するという、スレッド モデルへの変更があります。多くのスレッドを実行し、時折クラッシュするアプリを更新しているときに、これに遭遇しました。明らかに、.Net 2.0 モデルは確実にこれらをキャッチする必要があるため、より堅牢ですが、移行時に実際に遭遇した唯一の問題でした。

この記事では、それについてすべて説明しています: http://odetocode.com/blogs/scott/archive/2005/12/14/2618.aspx

于 2008-09-15T10:43:42.773 に答える
5

現在、同じ移行を行うことを検討しています。トビ。まず、プロジェクト (またはその一部) のコピーを作成し、.NET 2.0 コンパイラを使用して「予行演習」を行うことで、何が期待できるかを把握できます。これに関する私の経験では、2.0 コンパイラーは、1.1 コンパイラーが滑らせた悪いプログラミング慣行についてより多くの警告を出すということでした。コンパイラは、暗黙的なキャスト、「あいまいな」リターン パス (関数が値を返さないコード パス)、およびその他のいくつかの小さなことについて警告します。

役立つリンクをいくつか紹介します: .NET Framework の互換性

.NET Framework 2.0 の破壊的変更の Word ドキュメント

于 2008-09-11T20:05:01.010 に答える
2

上記のアプリ構成に加えて、XSD検証を使用する場合は、XMLの読み込みと検証に関するコードを置き換える必要があります。

于 2008-09-11T20:09:14.557 に答える
2

.NET 2.0 アプリケーションの 3.5 への進化に関するホワイトペーパーをご覧ください。1.1 から 2.0 への変更はより重要だと思いますが、プロセスは似ているはずです。

于 2008-09-11T19:57:08.500 に答える
2

本当に何もありません。廃止されたメソッドに関するコンパイルに関するいくつかの警告が表示されますが、多くの場合、それらは簡単に修正できます。

あなたは大きく撃ち、3.5に行くべきです. ここの水はいいです。

于 2008-09-11T19:50:13.260 に答える
1

RESXファイルのアップグレードの問題

国際化されたRESXファイルに注意してください。

.net 2.0で.net1.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に移行すると、resxファイルが再生成されるため、Infragisticsリソースの番号付けが失敗します。Infragisticsライブラリをアップグレードする必要があります。

于 2008-10-05T08:22:46.503 に答える
1

.NET1.1と.NET2.0-3.5は完全に異なるフレームワークであり、さらに重要なことに、.NET 3.5は、.NET 2.0プロジェクトに追加できる追加のアセンブリのセットにすぎません。コアアセンブリは、実際には変更されていません。私は知っています-そして、LINQと呼ばれるシンタックスシュガー、拡張メソッドなどを知っているアップグレードされたコンパイラです。

言い換えれば、.NET2.0-3.5のアップグレードは.NET1.1-2.0のアップグレードと非常に似ているとは思いません。

于 2008-09-11T20:12:34.157 に答える
1

おそらくコンパイルは問題ありませんが、今年の初めにアップグレードしたアプリケーションで、ランタイムに関する厄介な問題がいくつか発生しました。

まず、2.0アプリケーションから1.1 Webサービスを呼び出すときのDateTimeオブジェクトのタイムゾーン処理に多くの問題がありました。これは、ワイヤーにシリアル化するときのUTCとの変換がフレームワークのバージョン間で異なるように見えるためです。

また、2.0非同期Webサービスは、IAsyncResultパターンの代わりにklutzyイベントベースのメカニズムを使用します。これは、リクエストをバッチ処理する場合の大きな問題です。

最後に、Microsoft.mshtml.dllを使用して組み込みブラウザをホストするレガシーコードがいくつかありました。2.0にアップグレードすると、アプリケーションはそのdllの新しいバージョンにサイレントに切り替わり、JavaScriptの相互作用に関連する動作が変更されました。この最後のケースは少しあいまいなケースですが、新しいランタイムに移行すると、COMの相互作用に影響を与える可能性があることを示しています。

お役に立てれば!

于 2008-09-15T11:26:51.843 に答える
1

古いものに関するいくつかの警告を除いて、ほとんどのコードはまだコンパイルする必要があります。

ただし、Visual Studio で生成されたコードに関して注意すべき点がいくつかあります。

Visual Studio 2003 で厳密に型指定されたデータセットを生成した場合は、Visual Studio の新しいバージョンでそれらを編集することを忘れることができます。究極の OR マッパー至福のために、それらを再構築するか、nHibernate のようなものに置き換える必要があります。

フォームのデザイナは、古いフォームでも動作するはずです。ただし、2005 および 2008 ではここで部分クラスが使用されているため、多少の混乱が生じる可能性があります。そのため、新しいフォームを作成すると、コードは古いフォームとは異なって見えます。ASP.Net アプリケーションをアップグレードしたことがないので、Web フォームについてはわかりませんが、winforms と同じように機能すると思います。ほとんどの場合は機能しますが、デザイナーの奇妙な点が予想されます。

于 2008-09-11T19:59:07.187 に答える
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 = "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)
于 2008-09-16T16:58:34.067 に答える
1

表示されるコンパイル警告のほとんどは、app.config を使用してプログラム設定を保存する場合です。1.1 構成クラスは、System.Configuration.ConfigurationManager では非推奨になりました。

コンパイラから表示される可能性のあるその他の警告は、初期化されていない変数 (変数宣言でそれらを「= なし」または「= null;」に設定してそれらをなくす)、および未使用の変数 (コンパイラはそれらが確実に使用されていることを確認している) に対するものです。安全に削除できます)。

于 2008-09-11T19:55:32.013 に答える
0

理論的には下位互換性があるため、それほど大きな問題はないはずです (スレッド例外に関する MikeeMike のコメントに注意してください)。移動後は、ジェネリックなどの優れたものがかなりあることに気付くでしょう。すべてのコレクションを一挙にジェネリックに移植したくはありませんが、これを行うと、キャストの数が減るため、コードの信頼性が向上し、おそらくより高速になります (ただし、マイレージはこの側面で異なる場合があります)。 . 現在、3 つの製品の .NET 2 -> .NET 4 への変換を開始しようとしています。主な利点は、マルチスレッド サポート (並列 foreach ループなど) のさらなる改善です。

于 2011-01-04T14:50:31.523 に答える
0

非推奨のメソッドの警告が表示される場合がありますが、破壊的な問題はおそらく発生しません。ただし、コンパイラは通常、置換が何であるかを通知する必要があります。System.Configuration の一部が更新されたことは知っています。

于 2008-09-11T19:55:27.350 に答える