5

私は自分のマシンで 3.5 SP1 を使用していますが、顧客は現在 SP1 なしで 3.5 を使用しています。VS2008 でソリューションまたはプロジェクトを SP1 なしで 3.5 にターゲットにする方法がわかりません。インストールした SP1 付きの 3.5 だけです。

3.5 w/o SP1 で使用できない関数またはコンストラクタを使用すると、コードは正しく動作しません。

つまり、SP1 なしでは機能しないものをコンパイル時に検出したいと考えています。

これまでのところ、(VM または別のマシンで) テストを行って、アプリケーションが壊れるかどうかを確認しました。また、SP1 まで利用できなかった API の一部を使用すると、アプリケーションが壊れることがあります。問題は、アセンブリがロードされたときではなく、コードが実際に実行されたとき (実行時) にのみ壊れることです。

1 つの解決策は、SP1 なしの VS2008 を搭載したマシンを用意して、プロジェクトをコンパイルしようとすることです。ただし、ソースコードまたは生成したアセンブリを分析することにより、3.5 SP1 への依存関係 (新しい API の使用などによるもの) を検出するのに役立つツールが必要です。

私のグーグルの力は、この質問では十分に強くありませんでした.何かヒントはありますか?

4

5 に答える 5

5

私はちょうど同じ問題を抱えていたので、解決策を見つけました。私たちのアプリケーションでは、System.Threading.WaitHandle.WaitOne(Int32) の呼び出しで問題が発生しました。サービス パック リリースで導入された API への参照が、Visual Studio に気付かれずにコードにリークする方法の詳細については、Krzysztof Cwalina の投稿を参照してください。

良いニュースは、マークが彼の答えであると述べたように、FxCop にはこれらのリークを検出する新しいルールがあることです。悪いニュースは、.NET Framework 3.5 を対象とする場合、FxCop 1.36 でルールが壊れていることです。ただし、David Kean は、いくつかの XML 構成ファイルを編集して問題を修正する方法について説明しています。指示に従ったところ、FxCop はサービス パック API への参照を検出するようになりました。

于 2009-03-23T21:29:30.117 に答える
2

これはどうですか?(FxCopのマルチターゲティングルール)

于 2008-10-24T12:05:09.780 に答える
1

ここにあるコードを使用して、インストールされている.NETFrameworkを検出できます。

于 2008-10-24T14:14:53.120 に答える
0

string Fx35RegistryKey = @ "HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ v3.5"; オブジェクトFx35ServicePack=Registry.GetValue(Fx35RegistryKey、 "SP"、null);

if(Fx35ServicePack == null ||(int)Fx35ServicePack <1)throw new Exception("。NETFramework 3.5 SP1が必要です。");

于 2008-12-18T23:37:49.513 に答える
0

私が試していない別のオプションがあります。Visual Studio のドキュメントには、ClickOnce インストーラーで .NET 3.5SP1 フレームワークを明確にターゲットにすることができると記載されています。リンクをたどって、「Targeting .NET Framework Version 3.5 SP1」を検索します。基本的に、次のいずれかを実行すると、インストーラーに 3.5SP1 のインストールが強制されると記載されています。

  • [パブリッシュ オプション] ダイアログ ボックスでエラー URL を指定します。
  • [発行オプション] ダイアログ ボックスでスイート名を指定します。
  • [パブリッシュ オプション] ダイアログ ボックスでデスクトップ ショートカットを作成します。
  • [アプリケーション ファイル] ダイアログ ボックスでハッシュからファイルを除外します。
  • [署名] ページの [ClickOnce マニフェストに署名する] チェック ボックスをオフにします。
  • System.Data.Entity アセンブリへの参照を追加します。
于 2009-03-23T21:36:40.257 に答える