会社のデータベースの異なるバージョンで動作する通信ライブラリの 2 つの異なるバージョンのラッパーを作成しています。これらの通信ライブラリには、同一の完全修飾名を持つクラスがあるため、参照を別のエイリアスにロードしています。どちらか一方をグローバル エイリアスで、両方を非グローバル エイリアスで試してみましたが、どちらの場合も Visual Studio 2012 でコンパイル エラーが発生しました。具体的には、両方のラッパー クラスで、ファクトリ メソッドから接続を取得しています。
extern alias MyAliasVersionX;
using MyAliasVersionX::Example.MyNamespace;
...
private Connection _connection;
...
_connection = Connection.Create(environmentName); // this returns an Example.MyNamespace.Connection--but this is where the compile error happens
コードは、両方のクラスで実質的に同じです。最大の違いは、上部の using ステートメントのエイリアスのバージョンです。1 つのクラス (最初にリストされている参照のように見えます) では、すべて正常に動作し、エラーは発生しません。他のクラスでは、Visual Studio は、Connection.Create() が別のバージョンの Connection オブジェクト (つまり、MyAliasVersionX::Example. MyNamespace.Connection)。
重要な部分は次のとおりです。実際にプロジェクトをビルドすると、正常にコンパイルされ、正常に実行され、[エラー一覧] ペインに表示されているエラーが消えます...コードに変更を加えるまで、その時点で戻ってくることはありません。ビルド エラーが発生します。
これは Visual Studio のバグですか? そうでない場合、何が欠けていますか?