1

会社のデータベースの異なるバージョンで動作する通信ライブラリの 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 のバグですか? そうでない場合、何が欠けていますか?

4

1 に答える 1

2

Microsoft によると、これは VS-2008 にさかのぼる Visual Studio のバグです。VB.NET/C# 編集 (「Roslyn」と呼ばれる) の大幅なオーバーホールがリリースされるまで、おそらく修正されません。(これに不満がある場合は、以下の Connect フィードバックに賛成票を投じて Microsoft に知らせてください!)

https://connect.microsoft.com/VisualStudio/feedback/details/786107/visual-studio-shows-error-cs0029-for-types-in-non-global-alias

于 2013-05-09T22:30:00.047 に答える