it-swarm.com.de

Zufällige Assembly-Referenzen schlagen fehl ("Vermissen Sie eine using-Direktive oder eine Assembly-Referenz?")

Meine Anwendung verfügt über eine Mischung aus 3,5- und 4,0-Ziel-Assemblys. Ich arbeite an einem neuen Windows-Dienst, der auf 4.0 ausgerichtet ist, und das Projekt scheint einige der anderen Assemblys in der Lösung plötzlich nicht zu sehen. Das bedeutet, dass beim Erstellen alle Verweise auf diese bestimmten anderen Assemblys den folgenden Fehler verursachen:

Der Typ- oder Namensraumname '[X]' ist im Namensraum '[Y]' nicht vorhanden (fehlt eine Assemblyreferenz?)

Wenn ich die Projektreferenz lösche und wieder hinzufüge, gehen die roten Schnörkel weg und Intellisense tritt wieder wie erwartet ein. Alle anderen Projekte in der Lösung werden ohne Probleme erstellt. Aber sobald ich versuche, dieses neue Projekt zu erstellen, kommen die Fehler zurück.

Einer der fehlgeschlagenen Verweise bezieht sich auf unsere Core.dll, die auf 3.5 zielt. Wir haben vor kurzem ein CoreEx.dll-Targeting 4.0 hinzugefügt, bei dem der Namespace von den Assemblys gemeinsam genutzt wird. Der neue Dienst kann CoreEx.dll aber nicht Core.dll sehen ... d. H., Wenn ich using Core.Utilities... eingebe, übernimmt Intellisense die kleineren Namespaces von CoreEx.dll, zeigt jedoch keine, die nur in Core.dll erscheinen. Ich bin mir ziemlich sicher, dass die Lösung nach dem Hinzufügen erfolgreich erstellt wurde, aber es ist eine bemerkenswerte kürzlich vorgenommene Änderung.

Ein weiterer fehlerhafter Verweis bezieht sich auf unsere Kerndaten Data.dll, die eine Reihe von Datensätzen und Entity Framework enthalten. Dieser wurde kürzlich auf 4.0 migriert. Ich bin fast schon überzeugt, dass die Lösung nach der Migration des Projekts erstellt wurde, aber es ist erwähnenswert.

Der letzte fehlgeschlagene Verweis ist eine Assembly, die den Namespace eine Ebene "aufwärts" des Dienstes verwendet. Zum Beispiel basiert das problematische Projekt außerhalb des Namensbereichs ProductName.Component.ComponentService und es ist nicht möglich, das Projekt außerhalb des Namensbereichs ProductName.Component anzuzeigen. Dieses Projekt wurde kürzlich zusammen mit dem problematischen Projekt erstellt und zielt auch auf 4.0 ab.

Wie Sie sehen, scheint es keinen Reim oder Grund zu geben, an dem Assembly-Referenzen versagen ... und das problematische Projekt kann erfolgreich einige der anderen Assemblys in der Lösung referenzieren. Ich habe versucht, Visual Studio zu säubern, neu zu erstellen und neu zu starten ... nichts hat es dauerhaft behoben. Was könnte das verursachen?

31
Calvin Fisher

Überprüfen Sie die Zielplattform des neuen Projekts und stellen Sie sicher, dass keine .NET 4-Clientprofile verwendet werden. Wenn dies der Fall ist, ändern Sie es in reguläres .NET 4

60
Dimitri

Ich fügte Projekte zu einer Lösung hinzu, die .net 4.5 verwendete. Die Projekte, die ich hinzugefügt hatte, waren standardmäßig auf 4.5.1 eingestellt. Dadurch wurden 4.5 Bibliotheken mit den neuen Projekten nicht kompatibel. Ich ging auf die Eigenschaften meiner neuen Projekte ein und ließ sie 4,5 anstatt der Standardeinstellung 4.5.1. Nachdem ich das getan hatte, konnte meine Lösung bauen.

2
user3770181

Sind die Abhängigkeiten in der Lösung richtig eingestellt? Ich habe mehr als eine Gelegenheit gesehen, bei der Projekt A von Projekt B abhängt, aber da die Abhängigkeit zwischen den beiden nicht festgelegt wurde, schlägt der Build sporadisch fehl.

Die zugrunde liegende Ursache ist in diesem Fall, dass die Reihenfolge der Builds nicht deterministisch ist und der Erfolg/Misserfolg davon abhängt, welche Projekte (basierend auf den geänderten Änderungen) und welche zuerst erstellt werden (wenn mehrere Builds erstellt werden).

1
DocMax

Dieses Problem ist mir passiert, als ich es gelöst habe, indem ich alle using -Anweisungen oben löschte und sie erneut manuell schrieb. 

0

Es funktionierte für mich, als ich das Zielframework auf 4.0 änderte. Aber das war nicht die Lösung, die wir wollten. Wir wollten VS 2010 Premium für unser Projekt verwenden, aber die Absicht war, NICHT .net 4.0 ... zu verwenden. Die Hauptklasse Bibliotheksprojekt (.net 2.0) verwies auf die DLL "system.web.abstractions.dll" ... Ich habe den Verweis auf diese DLL in anderen Projekten (.net 2.0) hinzugefügt, die auf die Hauptklassenbibliothek verweist ... die Lösung wurde kompiliert ohne Probleme ... so könnte es bei Ihrer visuellen Studio-Lösung der Fall sein ...

Aber alles funktioniert gut, wenn wir VS 2008 professional verwenden. Wir brauchen keine Problemumgehung und alles funktioniert wie Magie ...

Beachten Sie auch, dass dies passieren kann, wenn Sie den Namespace ändern, aber den Assemblynamen in den Projekteigenschaften nicht geändert haben.

0
Louhike

Ich hatte ein ähnliches Problem, eine Assemblyreferenz schlug fehl ("Vermissen Sie eine using-Direktive oder eine Assemblyreferenz?") Und VS Intellisense gab mir die Möglichkeit, die Verwendung hinzuzufügen, aber in der Lösung enthielt die Referenz das gelbe Symbol und den Build versagte 

Ich habe dieses Problem gelöst, indem ich mir die Projekteigenschaft Target Framework angesehen und die .net-Version in die Referenzlösungsversion geändert habe. Dadurch wurden alle Probleme gelöst.

Hinweis: Die .net-Versionen sollten zwischen Projekten kompatibel sein.

0
DJon