13

コンピューターにVS2010とVS2012をインストールし、.NET Framework 4.0をインストールしてから、.NETFramework4.5にアップグレードしました。ただし、.NETFramework4.0で動作する必要のあるアプリをまだ開発中です。プロジェクトは、.NET Framework 4(クライアントプロファイル)を対象としていると述べており、アセンブリは参照アセンブリの下の.NETFramework4.0フォルダーを指しています。このアプリケーションを4.0しかないマシンに移動すると、問題が発生します。起動せず、エラーが発生します。この問題WindowState={Binding WindowState}は、4.0では実行できませんが、4.5では実行できる例外です。開発ボックスで例外をスローするためにこれが必要ですが、なぜそうではありませんか?私の最善の努力にもかかわらず、4.5dllが存在する場合はそれを使用することを前提としています。4.5をアンインストールせずに4.0を実際に使用するにはどうすればよいですか?

アップデート

これを再現するには、.NET Framework 4.5をインストールし、.NETFramework4.0を対象とするWPFプロジェクトを作成します。WindowStateをVMまたはコードビハインドのプロパティにバインドして、このプロパティにパブリックgetとプライベートセットを設定します。.NET Framework 4.5は、Mode =TwoWayが設定を無視する必要がある場合でもこれを適切に処理します。.NETFramework4は、例外をスローします。「TwoWayまたはOneWayToSourceバインディングは、タイプの読み取り専用プロパティ「State」では機能しません。 。」。.NET Framework 4.5のボックスは魅力のように機能し、.NET Framework 4.0のみを搭載したマシンで試してみると、爆発します...では、4.5がインストールされているときに4.0を実際にターゲットにする方法について何かアイデアはありますか?

ここでMSへのバグレポート:https ://connect.microsoft.com/VisualStudio/feedback/details/774694/targeting-net-framework-4-0-when-4-5-doesnt-seem-to-work

4

5 に答える 5

3

この質問をパントする時間です。私はWPFの専門家ではありません。この種の問題についてはあまり好きではありません。依存関係プロパティの問題をデバッグすることは、悪夢です。しかし、私はあなたが幽霊を追いかけているとかなり確信しています。WindowStateは、3.0までずっと依存関係のプロパティでしたが、4.5では、私が見たり聞いたりしたことのある特別なことは何も起こりませんでした。

バインディングと関係があることを誰も確信できないようなエラーメッセージが表示されました。私はミズーリ州のShowMeStateから来ました。まあ、ウィスコンシンに十分近い。

デプロイ先のマシンでエラーを診断するのに役立つ信頼性の高い例外メッセージとスタックトレースを提供するコードに、より多くの時間を費やしてください。デバッガーがない場合は、何が問題になっているのかを把握するのに役立ちます。これを行うには、AppDomain.CurrentDomain.UnhandledExceptionイベントのイベントハンドラーを記述します。e.ExceptionObject.ToString()の戻り値をログに記録または表示します。それはあなたに例外メッセージと聖なるスタックトレースを与えます。それでも問題が解決しない場合は、質問を更新してください。

于 2012-12-18T22:38:52.640 に答える
3

これは.NETFramework4.5のバグのようで、例外をスローするはずですが、.NET Framework 4.5がインストールされている場合、アプリケーションを.NETFramework4.0で実行する方法はありません。常に4.5を使用します。

詳細については、この報告されたバグを参照してください: http: //connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

于 2012-12-20T19:23:12.560 に答える
0

これをテストプロジェクトで再現することはできないとおっしゃいました。つまり、4.0で正常に動作するはずのことを意味しますか?4.5で修正された4.0のバグでクラッシュするコードの組み合わせがあるかもしれません。4.0をターゲットにすると、コンパイラが4.0でサポートされていないと判断できるAPI/機能を使用しようとしたときにのみ警告が表示されます。

4.0で動作するはずの何かが、めったに見られないバグが原因でクラッシュし、4.5で修正される場合があります。4.0を対象としたアプリを4.5環境で実行すると、4.0に存在していた機能のバグ修正の影響を受けます。

バグ修正を含む4.0のアップデートがある可能性があります。これにより、ユーザーが何らかの理由で4.5のアップグレードに反対した場合でも、4.5のアップグレードは必要ありません。したがって、4.5の変更でさえないかもしれませんが、一部のユーザーが4.0で利用可能なすべての更新を持っていないという偶然の一致です(4.5に累積的に含まれているはずです)。

このようなケースはめったに発生しませんが、時々発生します。デスクトップ.N​​ETアプリケーションをサポートする人々が、トラブルシューティングに時間を費やす前に、奇妙な問題を解決するための最初の試みとして、ユーザーに.NETFrameworkの更新を求めることで悪名高い理由です。

時々逆のことが起こります。コードは、.NET APIのバグまたは動作不良が原因でのみ機能します。その後の更新により、これがクリーンアップされます。おそらく、どこかでセキュリティを強化することが最も頻繁に見られます。マイナーバージョンの更新により、コードが突然壊れます。 .NETの。

于 2012-12-19T00:31:04.880 に答える
0

.Net 4.5は、.net 4.0を、実際にはいくつかの修正が加えられた同じ名前の新しいライブラリに置き換えます。それは短い答えです。

以前のバージョンとは異なり、.net 4を4.5に更新すると、サイドバイサイドファイルを追加するのではなく、ファイルが置き換えられます。このWindows/Microsoft.Net / Framework / v40 /のようなフォルダがある場合でも、更新後、このフォルダに変更があります。ファイルが変更され、一部のエラーは開発者の心配なしに.netで処理されました。

.net 4.5を使用して4.0フレームワークをターゲットにする方法は?まだわかりませんが、まだ掘っています

このトピックに関する推奨読書:

スコット・ハンゼルマン: http ://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

リック・シュトラール: http ://weblog.west-wind.com/posts/2012/Mar/13/NET-45-is-an-inplace-replacement-for-NET-40

そして私が作成した同様の問題: https ://stackoverflow.com/questions/26483168/errors-on-net-4-0-dont-appear-on-net-4-5

于 2014-10-21T13:07:01.193 に答える
0

ソリューション:

VS2015の後にVS2017をインストールしたときに同じ問題が発生します:Framework4.0がプロジェクトターゲットリストから消えました。

このあたりのコメントに続いて、NuGetパッケージを試してみました:Microsoft.CodeDom.Providers.DotNetCompilerPlatform1.0.4および1.0.1のbin修正。

そうしないでください!同じプロジェクトでビルド時間が最大300%増加しました。災害でした。

4.5は4.0の「インプレース置換」であることがわかりますが、これは、ターゲットフレームワークの組み合わせで両方のオプションが表示されない理由を説明していません。

私はウェブ全体で同じマントラを読んでいました。それは単に問題への答えではありません。Framework 4.0は、産業機械関連のソフトウェアには必須です。WindowsXPで動作するのに対し、.NET4.5では動作するためです。私のシナリオでは、そしておそらく他の多くの現実のものには役に立たない。

解決策は簡単です。公式WebページからVisualStudio2013 Expressをダウンロードしてインストールするだけです: https ://www.microsoft.com/en-us/download/details.aspx?id = 44914

インストール後、VS2015を開くだけで、 4.0が再び表示されます。

ここに画像の説明を入力してください

...「インプレース交換...」私の...


これは、私が重複した質問に対して行った回答の再投稿です。このスレッドがより注目を集め、ここにある既存の回答では問題の解決策が得られないため、ここに投稿します。

于 2017-05-09T18:45:55.173 に答える