Frage

So (scheinbar) von den blauen, mein Projekt beginnt immer compiler-Warnung 1685:

Der vordefinierte Typ 'System.Laufzeit.CompilerServices.ExtensionAttribute' definiert ist in mehrere Assemblys in der global-alias;mithilfe der definition von 'c:\Program Files eference Baugruppen\Microsoft\Framework\v3.5\System.Core.dll'

Ratlos, recherchierte ich im MSDN-Artikel, um herauszufinden, die Ursache.Hier die Informationen die ich gefunden habe:

Visual C# - Referenz:Fehler und Warnungen Compiler Warning (level 1) CS1685

Fehlermeldung Den vordefinierten Typ 'System.type name' is defined in mehrere Assemblys im globalen alias;mit der definition von 'Datei Name'

Dieser Fehler tritt auf, wenn eine vordefinierte system Typ, wie System.int32 ist in zwei Baugruppen.Ein Weg, diese passieren kann, ist, wenn Sie verweisen mscorlib aus zwei verschiedenen Orten, wie versuchen zu laufen the.Net Framework-Versionen 1.0 und 1.1 side-by-side.

Der compiler die definition nur aus einer der Versammlungen.Die compiler sucht nur Globale Aliase, nicht suchen-Bibliotheken definiert /Referenz.Wenn Sie angegeben haben /nostdlib, der compiler Suche für die Objekt -, und in die Zukunft starten alle sucht nach vordefinierten Typen in die Datei, in dem er Gefundene Objekt.

Jetzt bin ich wirklich ratlos.

  1. Ich bin nicht knapp zwei verschiedene Versionen von .NET Framework (es sei denn, Sie zählen 2.0 und 3.5).

  2. Ich bin nicht Referenzierung jede bizarre Assemblys, die könnte machen Sie mir verdächtig.

  3. Ich erinnere mich nicht, dass änderungen an meiner Anwendung, würde spur diese Veränderung.

  4. Ich habe überprüft, dass alle Komponenten target .NET Framework version v2.0.50727.

Ich bin offen für Vorschläge, oder Ideen, wie das zu korrigieren.Ich behandle Warnungen als Fehler, und es ist driving me crazy.

Was mich wirklich ärgert ist, dass ich nicht weiß, warum es geschieht.Dinge, die geschehen sollte eine erkennbare Ursache, und ich sollte wissen, warum Sie passiert sind.Wenn kann ich es nicht erklären, ich kann es nicht genau beheben.Rätselraten ist nie zufriedenstellend.

Die Anwendung ist einfach, bestehend aus einer Klassenbibliothek und windows forms-Anwendung.

  • A C# class library DLL Bereitstellung der grundlegenden Funktionalität der Kapselung der Datenbank zugreifen.Diese DLL-Verweise die folgenden Komponenten:

    • System
    • System.Core
    • System.Kern.Daten
    • System.Daten
    • System.Daten.DataSetExtensions
    • System.Daten.OracleClient -
    • System.Zeichnung
    • System.Windows.Formen
    • System.Xml
    • System.Xml.Linq
  • A C# Windows Forms-Anwendung, die Bereitstellung der UI.Diese Anwendung verweist auf die folgenden Komponenten:

    • CleanCode
    • CleanCodeControls (beide bieten syntax-editor-Unterstützung, und werden vor Ort gebaut .NET 3.5).
    • LinqBridge
    • Roswell.Rahmen (die Klassenbibliothek oben)
    • System
    • System.Core
    • System.Daten
    • System.Daten.DataSetExtensions
    • System.Daten.OracleClient -
    • System.Bereitstellung
    • System.Design
    • System.Zeichnung
    • System.Windows.Formen
    • System.Xml
    • System.Xml.Linq

Lassen Sie mich wissen, wenn Sie weitere Informationen benötigen und ich werde gerne zur Verfügung stellen.

War es hilfreich?

Lösung

LINQBridge macht mich sofort misstrauisch.Die ganze Absicht dieses ist die Bereitstellung extension attribute/Methoden usw. für 2.0-Benutzer.Wenn Sie über 3.5 (System.Core.dll), nicht verwenden LINQBridge.Wenn Sie do brauchen LINQBridge in 3,5 aus unerfindlichen Gründen (und ich kann nicht glauben), dann müssen Sie möglicherweise eine extern-alias.Aber Ich wirklich Zweifel, die Sie es brauchen!

Andere Tipps

Eine andere einfache Methode, um zu überprüfen:In Ihrem code vorübergehend zu verwenden, die Klasse irgendwo.Beispiel:

System.Runtime.CompilerServices.ExtensionAttribute x = null;

Beim erstellen, generiert diese Fehlermeldung:

Der Typ 'System.Laufzeit.CompilerServices.ExtensionAttribute' existiert in beiden 'c:\Program Files eference Baugruppen\Microsoft\Framework\v3.5\System.Core.dll " und .....

Und zeigen Ihnen sofort die 2 Quellen, die den Konflikt verursacht.

Marc ist fast sicher richtig.Hier ist ein Weg, um zu überprüfen,

  1. Öffnen Reflector.exe
  2. Fügen Sie alle Nicht-System-Baugruppen
  3. Die F3-Taste und Suche für ExtensionAttribute

Wenn es erscheint, überall neben System.Core-dann wissen Sie, wo es herkommt.

Eine andere Lösung für dieses Problem ist die Verwendung einer globalen alias für die ganze Versammlung:

Referenz -> Eigenschaften -> Aliase -> Ersetzen Sie "global" mit etwas anderes

FYI:Ich hatte das gleiche problem und konnte es beheben, indem Sie mithilfe von Resharper ist "Optimize References" - Befehl, und dann entfernen Sie alle nicht verwendeten Referenzen.Nicht ganz sicher warum das klappte auch, aber er Tat es.

Eine andere Lösung für dieses Problem => Rechtsklick Projekt -> Eigenschaften -> Build -> Behandeln von Warnungen als Fehler - > "Keine"

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top