1

Mercurial 担当者に ac# ライブラリ (VS2010 で開発中) があり、現在 netFX-3.5 をターゲットにしています。ライブラリで使用したい netFX-4.0 の機能がいくつかありますが、2.0 CLR に限定されているプロジェクトがたくさんあるため、netFX-3.5 バージョンも保持および維持したいと考えています。当然のことながら、両方のバージョンで同一のコード (場合によってはほとんどのコード) が存在します。今、これを維持するための最良の(または少なくとも良い)方法であることに戸惑っています。

VS で別のプロジェクトを作成する必要がありますか? それとも、リポジトリのクローンを作成しますか? そのための実績のある戦略はありますか?

更新: VS Add as Link機能を見つけました。これにより、プロジェクト間でファイルを共有できます。これは、2 つのターゲットを同じソリューション内の 2 つのプロジェクトとして実装する上で大きな利点です。私はこの解決策を採用していると確信していますが、さらにアドバイスがあれば、それは素晴らしいことです!

Update2: 前に述べたように、 [リンクとして追加] 機能を使用して、次のように目的の結果を達成しました: 古い (3.5) フレームワーク用の新しいプロジェクトを作成します。最上位バージョンのプロジェクトからのリンクとしてすべてのファイルを追加します。v4.0 プロジェクトでは、netFX-4.0 機能を のpartial classような仕様でクラスに追加しますClassName.Net40.cs。私にとってはうまくいきます。

4

2 に答える 2

1

通常、人々は MSBUID ターゲットを介してそれを行いますが、Microsoft は最近、非常にクールな "Portable Library Tools" Visual Studio 拡張機能をリリースしました。これは、クラス ライブラリに非常によく似た新しいプロジェクト タイプを追加しますが、複数のフレームワークをサポートするインフラストラクチャを既に備えています。シルバーライト、WP7。

http://visualstudiogallery.msdn.microsoft.com/b0e0b5e9-e138-410b-ad10-00cb3caf4981/を確認してください

于 2011-06-20T04:05:34.727 に答える
0

実績のある戦略についてはわかりません。なぜなら、それは何がどのように異なるのかに大きく依存するからです。具体的に知らなくても、おそらく役立ついくつかのアイデアを提供できます。

#もしも

1 つの方法は、.NET 3.5 と .NET 4.0 に個別のビルド構成を作成して、各ビルド構成で個別の条件付きコンパイル シンボルを指定し、特定の場所で次のようなことを実行できるようにすることです。

#if NET40
    // something specific to .NET 4.0
#else
    // version for .NET 3.5
#endif

ビルド構成を使用すると、簡単に切り替えることができ、一度にすべてをビルドできます。ただし、主にコードに役立ちます。

MQ

あるプロジェクトでこれを行った方法 (しばらくの間、Caliburn.Micro の .NET 3.5 バージョンが必要でした) は、Mercurial Queues を使用して、リポジトリに適用できるパッチを「ダウングレード」することでした。CM リポジトリのクローンを更新し、変更を再適用できるようにする必要があったため、MQ の使用はソリューションの必須部分でした。

ここで条件付きコンパイルが役に立たないもう 1 つの理由は、Blend SDK Interactivity アセンブリへの CM の参照を以前のバージョンに変更する必要があり、プロジェクト ファイルで条件付き参照を行う方法がわからなかったことです。

(以前に MQ を使用したことがない場合: MqTutorial、およびMercurial: The Definitive Guide の第12章と第13章。)

于 2011-06-20T14:26:54.123 に答える