6

Silverlight C# アプリを開発しています。Microsoft DLL への参照を追加したところ、次のメッセージが表示されました。

タイプは両方の DLL に存在します

両方の DLL で定義されているコントロールを使用しているため (1 つは SDK に関連付けられており、もう 1 つは自分で追加したものです)。

インターネットでいくつかの調査を行った後、両方の DLL のエイリアスを作成し、.xml を使用してそれらをインポートしようとしましたextern alias <alias_name>。このアプローチは、xaml.cs コード ビハインドの問題を解決しましたが、xaml の問題は実際には解決しませんでした。これを行った後、Visual Studio は、(追加した DLL からの) コントロールの 1 つが名前空間で定義されていないと不平を言いました。

エイリアスを使用して XML で名前空間を指定する方法があるかどうか疑問に思っています。

ありがとうございました。

4

2 に答える 2

4

スタックオーバーフロー

MSDN

コンマ区切りを使用して、2 つ目のエイリアスをアセンブリに追加するだけです。

例えば

<Aliases>global,alias_name</Aliases>

XAML はグローバル エイリアスを使用し、クラス内で自由に選択できます。

.

両方のアセンブリを 1 か所で使用する必要がある場合は、このソリューションが唯一のソリューションだと思います。

基本的には、必要なクラスごとに独自のプロジェクトの個別の名前空間に 2 つのラッパー クラスを作成し、競合するアセンブリの代わりにラッパーの名前空間を参照します。

于 2012-08-01T18:11:54.593 に答える
2

C#コード(XAMLではなく)で重複した名前空間からクラスを使用する場合、良い方法があります http://csc-technicalnotes.blogspot.ru/2009/07/type-exists-in-both-dlls.html

外部アセンブリ エイリアスを使用します。DLL参照の「エイリアス」プロパティを指定します。

  1. Visual Studio ソリューション エクスプローラーで、参照フォルダーを開きます。
  2. DLL 参照を右クリックし、[プロパティ] を選択します。
  3. 「エイリアス」プロパティにエイリアス値を入力します。
  4. 例: MyDLLv1.dll 参照のエイリアスは、"LegacyMyDLL" の可能性があります。

C# ソース コードでエイリアスを指定します。

// Old way
using MyNamespace;

// New way
extern alias LegacyMyDLL;
using LegacyMyDLL.MyNamespace;
于 2013-08-08T13:45:00.410 に答える