2011-11-26 8 views
6

私は、APIを提供するアセンブリをいくつかの他のアセンブリで使用しています。新しいバージョンのAPI dllが古いバージョンのAPIを使用していた古いアセンブリと互換性があることを確認する必要があります。.netアセンブリ間のAPIの下位互換性をテストする方法

私は同じことを尋ねる質問のカップルを見つけたが、私の問題を解決する何の答えはありません。

推奨ツールは2つだけを比較することができます最新のAPIがそれを使用している古いアセンブリを実際に破壊するかどうかはわかりません。 ツールを見つけたり、古いDLLのそれぞれが新しいAPI dllで動作するかどうかを確認できるテストを書いてみたいと思います。

APIの変更に関しては、私はそれを拡張するしかありませんが、古いアセンブリでもコードを破損する可能性があります。このような変更の例のいくつかは、ここで見つけることができます:

は、今の私が見る唯一の解決策は、最新のAPIと古いアセンブリのソースコードをコンパイルすることです私はアセンブリだけでそれを行い、単体テストの一部としてそれらを追加したいと思います。私がそれを処理できるより良い方法はありますか?

編集:

私は、.NETアセンブリ間の下位互換性を検証するプロセスを自動化することができるようになりますツールを探しています。 (コマンドラインまたはいくつかのAPIもあります)

+1

これはおそらく私が理解していないことですが、あなたが探しているツールが、組み合わせたソースをコンパイルするだけで、よりうまくやることができます。つまり、意図したやり方で急激な変化を分析できるようにするには、古いソースと新しいソースの両方を必要とするでしょうか? –

+0

@GertArnold質問を更新しました。私はこのプロセスを自動化したいので、手動でソースコードをコンパイルするか手動でツールを実行するのが便利ではないかもしれません。 – username

答えて

9

あなたが欲しいのは、diffを実行して、壊れた変更のリストを生成することです。次に、アセンブリの中に壊れたAPIを使用しているかどうかを調べたいとします。あなたはApiChangeツールを使ってdiffを実行し、影響を受けるユーザーを見つけることができます。

もっと具体的にする。インターフェイスからメソッドを削除した場合は、このメソッドのすべての実装者とユーザーを、インターフェイスメソッドまたはこのメソッドを実装するクラスを使用するクラスで見つける必要があります。

ApiChangeは、-whoimplementsインターフェイスと-whousesメソッドを使用して、コマンドラインで特定のメソッドの実装者とユーザーを検索できます。コマンドラインでは自動化されていませんが、ApiChange.Api.dllを直接使用してこのクエリを自動化できます。

EDIT1:

私は忘れてしまった:ApiChangeツールは、実際にfunctionalityあなたは既に興味を持っていました。これは、オプション-ShowrebuildTargets -new -old [-old2]我々は良い結果と私たちの部門でそれを使用しなかった

を-searchin

です。 XML Intellisenseファイルのみが存在します。別のターゲットが削除されたメソッドを使用しないが、XmlDoc内でそのメソッドを参照する場合、コンパイラは既存のメソッドが参照されていないという警告を出力します。これは捕捉するのが非常に難しく、intellisense文書ファイルも解析する必要があります。しかし、これは非常に重要なケースです。

+0

このアプローチは、 APIを使用するアセンブリのメソッド呼び出しであいまいさを招く新しいオーバーロードが追加されますか? – username

+0

コンパイラの曖昧性が壊れることはありません。私はあなたが再コンパイルが必要となる急な変更を見つけたいと思っています。再コンパイル時に、以前よりもいくつかの他のメソッドが使用されますが、既にビルドされているターゲットは、既にリンクされているメソッドで動作する必要があります。このようなサポートを追加したい場合は、メソッドのオーバーロードに対処するためにECMA C#仕様の一部を実装する必要があり、C#コンパイラがメソッドをどのように解決するのかについて説明します。 –

+0

ありがとう、私はちょうど私の最初のコメントで説明したケースをテストし、それは正常に動作します – username