2 Stimmen

Fehlende System.Windows

Ich habe eine ziemlich große Lösung mit einigen Silverlight- und WPF-Projekten darin, sowie einige Klassenbibliotheken und andere Dinge.

Eines der Projekte ist eine Klassenbibliothek, die auf eine SilverLight-Anwendung verweist, die auf System.Windows

Aber zur Laufzeit erhalte ich den Fehler:

{"Could not load file or assembly 'System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e' or one of its dependencies. The system cannot find the file specified.":"System.Windows, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e"}

Ich habe in der GAC ( C:\Windows\assembly ) und konnte es dort nicht sehen...

Was geschieht hier?

Der Verweis bezieht sich auf: c:\Program Files\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\System.Windows.dll die es tatsächlich gibt.

3voto

Hans Passant Punkte 894572

Klingt für mich wie Ihre WPF-Anwendung lädt eine Klassenbibliothek, die eine Silverlight-Assembly verweist. Das kann nicht funktionieren, Katzen und Hunde. Wenn eine Assembly sowohl von einer WPF- als auch von einer Silverlight-Anwendung referenziert wird, muss sie zweimal mit unterschiedlichen Framework-Assembly-Referenzen kompiliert werden. Das erfordert zwei Projekte. Die WPF- und Silverlight-Sachen in verschiedenen Lösungen getrennt zu halten, ist der beste Weg, um Probleme zu vermeiden.

1voto

Frank Merrow Punkte 869

Ich habe ähnliche Fehler in zwei Fällen gesehen, die hier zutreffen könnten:

  1. Wenn eine Baugruppe, auf die ich verweise, eine Baugruppe benötigt, auf die ich nicht verwiesen habe in diesem Fall würde das bedeuten, dass System.Windows etwas anderes verwendet, auf das Sie ebenfalls verweisen müssen.

  2. Der interessantere Fall ist, dass VS2010 automatisch ".Net Framework 4 Client Profile" für mich auswählte, obwohl ich eigentlich ".Net Framework 4" brauchte (kein "Client Profile"). Wählen Sie die Projekteigenschaften und sehen Sie, was Ihre Einstellung ist.

Frank

Wenn Sie zusätzliche Anweisungen anfordern:

Öffnen Sie die Projektmappe in VS2010, klicken Sie mit der rechten Maustaste auf das betreffende Projekt (nicht auf die Projektmappenzeile) und wählen Sie unten "Eigenschaften" aus. In der resultierenden GUI wählen Sie die Registerkarte "Anwendung" und stellen Sie sicher, dass "Ziel-Framework" nicht "Client-Profil" im Namen hat das heißt, sollte ".NET Framework 4" nicht ".NET Framework 4 Client Profile" sein.

1voto

PixelJunkie Punkte 11

Ich habe diese Lösung nirgendwo anders gefunden, sondern bin durch Versuch und Irrtum darauf gestoßen...

Die Fehlermeldung war in meiner Situation etwas irreführend. Der Hinweis war, dass es nicht wirklich die "System.Windows"-Assembly selbst war, sondern eine der abhängigen Baugruppen .

Sie sollten Ihre GAC überprüfen und nachsehen, ob eine dieser Baugruppen darin enthalten ist:

  • System.Windows
  • System.Windows.Steuerelemente
  • System.Windows.Controls.Toolkit
  • System.Windows.Controls.Layout.Toolkit

Versuchen Sie, sie nur aus dem GAC zu entfernen, und führen Sie dann Ihren Rebuild durch. Wenn das nicht funktioniert, öffnen Sie einfach zwei Windows-Explorer-Fenster und kopieren Sie sie entweder aus dem c: \Program Dateien (x86) \Reference Baugruppen \Microsoft\Framework\Silverlight\v4.0\System.Windows.dll oder den Ordner für Ihr Silverlight Toolkit und Sie sind wieder da, wo Sie angefangen haben.

Ich habe folgenden Verdacht: Der Visual Studio 2010-Compiler ist verwirrt darüber, wo diese referenzierten Baugruppen zu bekommen, wenn die Build zu tun, weil die GAC-Assemblies immer Vorrang vor einer anderen Kopie einer Baugruppe (auch die Referenz Assembly-Ordner, die VS2010 verwendet). Also, auch wenn die Baugruppe technisch korrekt ist mit dem gleichen ID-Schlüssel und alles gibt es etwas mit dem VS2010-Compiler, der nicht bestimmen kann, welche Bibliothek für den Aufbau zu verwenden und es wird sich weigern, den Aufbau abzuschließen.

1voto

DarkIcaro Punkte 21

Mmmm manchmal setzen Sie Ihre Klassen in verschiedenen Projekt zum Beispiel können Sie ein Projekt für Viewmodels erstellen, wenn dies der Fall ist, dann müssen Sie PresentationCore.dll verweisen, dies ist die dll, die Sie Zugriff auf System.Windows geben, so dass Sie ICommand für Befehlsbindungen verwenden können

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X