2009-08-26 10 views
3

ソリューションのプロパティでターゲットフレームワークを設定すると、そのフレームワークまたはそれ以下の機能のみを使用するようにアプリケーションが制限されるという印象を受けました。私たちはただ誰かがリファレンスを追加してより高いバージョンのフレームワークからコードを使用することができ、コンパイラは1ビット不平を言っていないことを知りました。私たちは今後これを避けたいと思っていますので、誰かがより高いバージョンを参照しているものをどのように検出できるかについてのアイデアはありますか?誰かが目標を上回るコードを追加した場合、ビルドに失敗する必要があります。特定のバージョンの.netフレームワークを適用する方法

+0

このフラグは、ライブラリではなく上位フレームワークの言語(clr)機能のみを許可しません。 – andyp

答えて

0

なぜ動作したらこれを防止する必要がありますか?新しい機能を使用していない限り、互換性のあるDLLを「フォワード」することは可能です。

+1

開発者が誤って/知らずに新しい機能のいずれかを追加しないようにしたいと考えています。 – Alex

+0

私はこれらの問題をコンパイラが捕まえると期待しています。コンパイラでなければ、単体テストで確実にそれをキャッチします。 – David

1

.NET 2.0以上をターゲットとしていると仮定します。プロジェクトの参照でSystem.Coreや他の3.xアセンブリ(WPFなど)への参照を検出すると、ビルドが失敗する可能性があります。

<Reference Include="System.Core"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Xml.Linq"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 
<Reference Include="System.Data.DataSetExtensions"> 
    <RequiredTargetFramework>3.5</RequiredTargetFramework> 
</Reference> 

これは、カスタムNAntのタスクのようになります。<ItemGroup>タグの中に、次に

<TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 

:あなたは、各.PROJファイル内にチェックをして始めることができ

UPDATE

これらのノードを探してビルドに失敗するように独自のパーサーを作成してください。

+0

これはどのように検出しますか?私はマニフェスト、projファイルなどを見てきました。そして、各dllとどのバージョンのグローバルリストもなく、私は最良の判断方法を理解することができません。良いニュースは私がVS 2010をテストしたので、これを強制するので、最良の選択肢は2010年を待ってただちにアップグレードすることです。 – Alex

関連する問題