6

Ich bin ein Silverlight-C# app Entwicklung, und ich habe einen Verweis auf einen Microsoft-DLL und bekam die folgende Meldung hinzugefügt:Der Type XX in beiden DLLs vorhanden

Der Typ in beiden DLLs vorhanden

Da ich ein Steuerelement verwende, das in beiden DLLs definiert ist (eines ist mit dem SDK verbunden, das andere habe ich selbst hinzugefügt).

Nachdem ich im Internet recherchiert habe, habe ich versucht, einen Alias ​​für beide DLLs zu erstellen, und importiere sie mit extern alias <alias_name>. Dieser Ansatz löste einige Probleme im dahinter liegenden xaml.cs-Code, löste aber das Problem in xaml nicht wirklich. Nachdem ich dies getan hatte, beschwerte sich Visual Studio, dass eines der Steuerelemente (von der DLL, die ich hinzufügte) nicht in dem Namespace definiert ist.

Also frage ich mich, ob es eine Möglichkeit gibt, Namespace in XML mit einem Alias ​​anzugeben?

Vielen Dank.

+0

Sie ein Steuerelement mit dem _same samespace durch die framework_ verwendet entwickeln, ist das denn? Warum? – devundef

+0

Nein Ich entwickle nicht, sondern benutze ein Steuerelement, das in zwei DLLs definiert ist, die ich verwende. –

Antwort

4

Stackoverflow

MSDN

Sie brauchen nur eine zweite Alias ​​zu Ihrer Assembly Trennzeichen verwenden Komma hinzuzufügen.

zB

<Aliases>global,alias_name</Aliases> 

XAML wird die globale Alias ​​verwenden, und Sie können in Ihren Klassen auswählen und wählen.

. anstelle dem kollidiere Baugruppen

Wenn Sie beide Baugruppen an einem Ort zu verwenden, I think this solution is the only one.

Grundsätzlich erstellen zwei Wrapper-Klassen in eigenem Namensraum in Ihrem eigenen Projekt für jede Klasse erforderlich, dann den Wrapper-Namespaces verweisen.

+0

Hallo Danke, ich habe diesen Ansatz ausprobiert, aber es scheint nicht so zu sein, als ob ich das Problem gelöst hätte. Das xaml-Steuerelement (lasst das Steuerelement 'LL' aufrufen) ist in beiden dlls definiert, also möchte ich etwas wie das' LL'-Steuerelement, das ich in xaml verwende, von einer der dlls machen, aber nicht von der anderen, da ich nicht denke, ich habe noch eine Chance, den Namensraum des Controls anzugeben. Danke –

+0

Eine Alternative gefunden ... –

+0

Das scheint ein bisschen hacky zu sein, aber danke! –

2

Es ist ein guter Weg, wenn Sie Klasse von duplizierten namespae in C# -Code (nicht in XAML) verwenden http://csc-technicalnotes.blogspot.ru/2009/07/type-exists-in-both-dlls.html

Verwenden Sie eine externe Assembly Alias. Geben Sie die Eigenschaft "Aliase" der DLL-Referenz an.

  1. Öffnen Sie im Visual Studio-Projektmappen-Explorer den Ordner Verweise.
  2. Klicken Sie mit der rechten Maustaste auf DLL-Referenz, wählen Sie Eigenschaften
  3. Geben Sie Alias-Wert in "Aliase" -Eigenschaft ein.
  4. Beispiel: Alias ​​zu MyDLLv1.dll Referenz könnte "LegacyMyDLL" sein.

Geben Sie Alias ​​in C# Quellcode:

// Old way 
using MyNamespace; 

// New way 
extern alias LegacyMyDLL; 
using LegacyMyDLL.MyNamespace;