12

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

更新

これは、.NET Frameworkの4.5をインストールREPROおよび.NET Framework 4.0をターゲットとWPFプロジェクトを作成します。 VMまたはコードビハインドのプロパティにWindowStateをバインドすると、このプロパティにパブリックgetおよびprivateセットが設定されます。 Mode = TwoWayがセットを無視する必要がある場合でも、.NET Framework 4.5はこれをうまく処理します。.NET Framework 4では、例外はスローされません。「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

+0

.NET 4.0を対象としている場合、.NET 4.5でしか動作しないものを使用するコードはどうしてですか? –

+2

.NET 4.0がインストールされていないため、正確であると思いますが、あなたのdevボックスに例外がスローされません。 .NET 4.5がそれに取って代わりました。 –

+0

@ジョン:彼はそれが4.5で働いていたのか分からなかった。彼は、ユーザーが.NET 4.5をインストールしても、例外が発生するようにしたいと考えています。 – Cameron

答えて

3

これは.NET Framework 4.5のバグであり、例外がスローされるはずですが、.NET Framework 4.5がインストールされていると、.NET Framework 4.0でアプリケーションを実行する方法がなく、常に4.5が使用されます。

、これはより多くの情報のため、バグを報告してください: http://connect.microsoft.com/VisualStudio/feedback/details/773682/wpf-property-with-private-setter-is-updated-by-a-twoway-binding

3

時間。私はWPFの専門家ではなく、厳密にはこれらの種類の問題にはあまり気に入らず、依存関係プロパティの問題をデバッグするのは悪夢です。しかし、私はかなりあなたが幽霊を追いかけていると確信しています。 WindowStateは依存関係のプロパティで3.0まで戻ってきましたが、私が見たり聞いたことはありませんでした。

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

信頼できる例外メッセージとスタックトレースを提供するコードの作業に費やす時間を増やすことで、展開するマシンのエラーを診断するのに役立ちます。デバッガを使用しないと、何がうまくいかないかを把握できます。これを行うには、AppDomain.CurrentDomain.UnhandledExceptionイベントのイベントハンドラを記述します。 e.ExceptionObject.ToString()戻り値を記録または表示します。例外メッセージとHoly Stack Traceが表示されます。それが助けにならない場合は、あなたが見たものであなたの質問を更新してください。

+0

私はこれをサンプルプロジェクトでrepoにすることはできませんので、ウィンドウの状態について不平を言い張っていることは、何かの結果ですが、devのボックスでうまくいきます。テストボックスに例外がスローされますが、テストボックスに.NET Framework 4.5をインストールすると正常に動作します。したがって、.NET Framework 4.0と.NET Framework 4.5の間には、挑戦的に異なる行動があります。 – user1914199

+1

私はShow Me Stateの態度についてかなり明白でした。私はあなたがそれを示すために何をする必要があるのか​​を説明しました。まだ何も見ることはできません。見せて。 –

+0

これは実際に開発チームで再現できたバグです。確かに存在する。 – MaYaN

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.0で利用可能なすべてのアップデートを持っていないという偶然の一致(あなたの4.5に累積的に含まれていたでしょう)。

このようなケースはほとんどありませんが、ときどき起こることがあります。デスクトップ.N​​ETアプリケーションをサポートするユーザーが、.NET Frameworkを最初に試してみるとよく分かります時間のトラブルシューティング。

逆の場合があります。あなたのコードは、.NET APIのいくつかのバグや悪い振る舞いのためにのみ動作し、後のアップデートでこれを解決します。恐らくどこかでセキュリティを強化することは、私が見た中で最も頻繁に起こります。 .NETの。

+0

質問の更新を見て、私はテストプロジェクトでそれを再現することができましたが、.NET 4.0ではうまくいかないという警告は表示されません。読み取り専用のプロパティにバインドすることは、あなたがこれをキャッチしたと思うかなり重要なようです。 MSバグへのリンクをたどって添付ファイルを読み込むことで、テストプロジェクトを手に入れることができます。 – user1914199

+0

Visual StudioのRun/Debug Projectで対象バージョンの.NETランタイムスナップショットを使用すると非常に便利です。ただし、ターゲティングはその目的ではありません。いくつかのことは単にコンパイラが捕まえることはできません。特定のフレームワークをターゲットとする場合、そのバージョンには存在しなかったAPI、タイプ、特定の関数のオーバーロードなどを捕捉することしかできません。コンパイラはコードを実行して、例外をスローするパスがダウンしたかどうかを確認することはできません。同様の行に沿って、コンフィグレーションの変換は、実行/デバッグ中はテストするのが難しいものです。 – AaronLS

0

の.Net 4.5置き換えは、実際にいくつかの修正を持っていることを、新たに、同じ名前のライブラリと4.0 .NET。 これは簡単な答えです。

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

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

このトピックで読ん提案掘ってる:

スコットHanselman氏: 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

0

解決策:VS2015VS2017をインストールしたとき、私は同じ問題を持っている

:フレームワーク4.0は、単にプロジェクトのターゲットリストから姿を消しました。

ここで私はNuGetパッケージを試してみました:Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.4と1.0.1のbin fix。

を実行しないでください!私のビルド時間は同じプロジェクトで300%アップしました。それは災害だった。

私は4.5が4.0の「置き換え」であることを知っていますが、これは私のターゲットフレームワークのコンボで両方のオプションを見ることができない理由を説明していません。

私はウェブ全体で同じマントラを読んでいました。それは単に問題に答えていないだけです。フレームワーク4。0はです。産業用機械関連のソフトウェアはでなければなりません.Windows XPでも.NET 4.5でも動作します。私のシナリオでは役に立たず、おそらく他の多くの現実のものにとっては役に立ちます。

解決策は単純です: あなただけの公式Webページからエクスプレスをダウンロードし、のVisual Studio 2013をインストールする必要があります。ちょうどあなたのVS2015を開き、を参照してくださいよ、それをインストールした後 https://www.microsoft.com/en-us/download/details.aspx?id=44914

4.0再度。私の "場所の交換...では"

enter image description here

... ....


これは私が重複した質問に答えたの再投稿です。私はこのスレッドがより多くの注目を集めているのでここに投稿しています、そして、既存の答えはここでは問題を解決しません。

関連する問題