2016-04-14 8 views
4

I WarnungReferenzierung Projekt in mehreren Projekten der Lösung geteilt

CS0436 Warnung zu beheben versuche: Der Typ 'Class1' in‘... \ SharedProject1 \ SharedProject1 \ Class1.cs' Konflikte mit dem importierten Typ 'Class1' in 'ClassLibrary1, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null'. Verwenden Sie den in '... \ SharedProject1 \ SharedProject1 \ Class1.cs' definierten Typ. WpfApplication1 ... \ SharedProject1 \ WpfApplication1 \ MainWindow.xaml.cs

Repro:

  • erstellen Lösung mit 3 Projekten:

SharedProject1 (fügen neue Klasse it)

namespace SharedProject1 
{ 
    public class Class1() { } 
} 

ClassLibrary1

namespace ClassLibrary1 
{ 
    public class Class1 { } 
} 

WpfApplication1 (fügen diese zu MainWindow Konstruktor)

public MainWindow() 
{ 
    InitializeComponent(); 
    var a = new SharedProject1.Class1(); 
    var b = new ClassLibrary1.Class1(); 
} 
  • Referenz SharedProject1 sowohl in ClassLibrary1 und WpfApplication1;

  • bauen, erhalten Sie eine Warnung.

Frage: wie man die Warnung repariert?

Antwort

2

ändern der Abhängigkeit Schema aus:

Shared -> Class 
Shared -> Application 

zu:

Shared -> Class -> Application 

Das heißt: Aus Application ein direkter Verweis auf Shared.

Das erste Schema führt zu derselben Klasse, die in 2 dlls integriert ist. Das ist es, was den Konflikt verursacht. Im zweiten Schema ist die shared library in Class dll eingebaut und somit auch auf Application zu erreichen. Das erste Schema wäre in Ordnung, wenn Class und Application unabhängig voneinander wären.

All dies ist, weil ein freigegebenes Projekt keine Bibliothek generiert. Man muss also darüber nachdenken, es irgendwo in einer Bibliothek erscheinen zu lassen. Normalerweise nur an einem Ort. Das bedeutet normalerweise, dass jede gemeinsam genutzte Bibliothek nur einmal referenziert werden sollte.

0

versuchen, Ihren Code zu ändern:

 namespace SharedProject1{public class Class1() { }} 

in Ihrem Projekt WpfApplication1 Sie Verweise auf SharedProject1 und ClassLibrary1 hinzufügen müssen, es danach hork:

ich für Sie mit Ihrem Specefication ein Projekt erstellen haben :

Project exemple

+0

Dank für die Korrektur Typo ich tat, als Frage der Veröffentlichung. Das Problem ist jedoch immer noch. – Sinatr

1

Jarekczeks Lösung funktioniert, wenn Sie nur eine Klassenbibliothek haben, aber sobald Sie eine weitere Klassenbibliothek hinzufügen, die ebenfalls auf das freigegebene Projekt verweist, erhalten Sie dieselbe Warnung erneut.

Die Lösung mag offensichtlich sein, aber wenn es nicht hier ist es ...

Sie eine gewöhnlichere Klassenbibliotheksprojekt ‚Gemeinsame‘ genannt schaffen könnte, die eigene alle Klassen enthält nicht auf sie, sondern nur Verweise auf ein freigegebenes Projekt. Es dient als "Container" für den gemeinsamen Code.

So verweisen Baum könnte wie folgt aussehen:

SharedProject -> Common 
Common -> ClassLibrary1 
Common -> ClassLibrary2 
ClassLibrary1 -> Application 
ClassLibrary2 -> Application 
Common -> Application 
+0

Mit anderen Worten, Sie schlagen vor, * geteiltes Projekt in eine Klassenbibliothek zu konvertieren. Ich kann nicht widersprechen. Gemeinsame Projekte sollen in verschiedenen Assemblies verwendet werden, sobald Sie anfangen, sie in dlls zu integrieren - sagen Sie zu freigegebenen Projekten NO, konvertieren Sie sie in dlls und referenzieren Sie diese. – Sinatr

+0

Ich habe nicht gesagt, sie in dlls zu konvertieren. Es gibt nichts, was Sie davon abhält, sie direkt aus anderen Lösungen zu übernehmen. Ich poste eine mögliche Lösung für Konflikte, die auftreten, wenn mehrere Klassenbibliotheken dasselbe freigegebene Projekt in derselben Lösung referenzieren. Geteiltes Projekt ist immer noch da, unberührt. – dbrckovi

+0

* "Shared Projekt ist immer noch da, unberührt" * - nur in common.dll eingewickelt und sollte nie von etwas anderem verwendet werden .. klingt genau wie * Umwandlung * zu mir;) – Sinatr

Verwandte Themen