Wie kann ich die Fehlermeldung "Die Zielassembly enthält keine Diensttypen" in VS2008 entfernen?


70

Ich habe eine Client / Server-Wcf-Anwendung

Meine ausführbare Datei definiert keine ServiceContract, sie enthält nicht einmal einen Verweis auf System.ServiceModel( sondern einen Verweis auf eine Assembly, die die Verbindungslogik zum Server enthält ).

Ich habe eine andere Assembly, auf die meine EXE-Datei verweist, die a enthält ServiceContract.

Früher hat es gut funktioniert. Gestern habe ich viel mit meinen Projekteinstellungen gespielt ( Teilvertrauen, Vollvertrauen, Bereitstellungseinstellungen usw. ) und jetzt habe ich jedes Mal, wenn ich meinen Client starte, das folgende Meldungsfeld:

Microsoft WCF-Diensthost
Die Zielassembly enthält keine Diensttypen.
Möglicherweise müssen Sie die Codezugriffs-Sicherheitsrichtlinie dieser Assembly anpassen.

Dann friert VS 1 Minute lang ein und lässt mich schließlich mein Programm wie gewohnt debuggen.

Ich habe einen Beitrag zu diesem Problem gefunden , aber die Lösung trifft in meiner Situation nicht zu. Irgendwelche Ideen?

Antworten:


119

Das ist immer so. Du suchst 2 Stunden, postest schließlich auf SO und 5 Minuten später findest du die Antwort.

Auf der Registerkarte WCF-Optionen der Eigenschaften des Projekts, das das definiert ServiceContract, gibt es ein Kontrollkästchen mit der Bezeichnung "WCF-Diensthost starten, wenn ein anderes Projekt in derselben Lösung debuggt", das ich deaktiviert habe.

Ich habe keine Ahnung, wie es überhaupt überprüft wurde.

Jedenfalls hat das mein Problem gelöst. Informationen zu dieser Projekteinstellung finden Sie in der MSDN-Referenz .


1
Wo ist das in Visual Studio 2010?
Joncodo

3
@ Jonathan: Ich wette, dass Sie nicht auf die Eigenschaften des richtigen Projekts schauen. Sie müssen das Projekt wählen definieren den Vertrag; weder derjenige, der es implementiert, noch derjenige, der es aufruft.
Brann

Danke Brann, du hattest Recht. Es ist an der gleichen Stelle im Jahr 2010
Joncodo

Ich sehe dasselbe Problem und das Projekt, das den Vertrag definiert, hat keine Registerkarte mit den WCF-Optionen. Es ist ärgerlich ...
Omar Kooheji

1
Dies löste mein Problem. Ich denke, das liegt daran, dass ich den Service in einem anderen Projekt definiert habe, von dem er implementiert ist.
Puddinman13

11

Nur für den Fall, dass jemand anderes nach einer Antwort sucht, kann eine andere Ursache für diesen Fehler darin liegen, dass Sie zufällig eine App.configDatei in einem Projekt haben, das eine Klassenbibliothek mit einem <system.serviceModel>Abschnitt ist.

Ich habe Service-Code aus einem Projekt, das eine ausführbare Datei war, in ein anderes Projekt verschoben, aber versehentlich die alte App.configDatei verlassen. Mein neues Projekt, bei dem es sich um eine Konsolenanwendung handelte, die WCF programmgesteuert konfiguriert und gestartet hat. Da sich die alte App.configDatei jedoch in der Assembly befindet, auf die verwiesen wird, wird dieses kryptische Dialogfeld auch beim Debuggen der Konsolenanwendung angezeigt.

Es dauerte ungefähr 12 Stunden, um diese zu finden, da ich nicht wusste, dass der VS-Debugger alle Assemblys, auf die verwiesen wird, auf App.config überprüft, für die WCF-Dienste konfiguriert sind.


7

Um ein Projekt mit diesem Problem zu ermitteln, suchen Sie die Zeichenfolge 3D9AD99F-2412-4246-B90B-4EAA41C64699 in Ihren Projektdateien.

Beispiel: <ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>

Deaktivieren Sie dann die Projektoption "WCF-Optionen / WCF-Diensthost starten, wenn Sie ein anderes Projekt in derselben Lösung debuggen".


1
Während diese Lösung die Angelegenheit für einige Leute lösen könnte, entfernt sie zumindest in vs2015 "Veröffentlichen" aus dem Kontextmenü, wenn Sie mit der rechten Maustaste auf das WCF-Projekt klicken ...
Ricardo Appleton

1
Ja, dies hilft uns zu finden, welches Projekt wir fälschlicherweise den "Start WCF Service Host when ..." überprüft haben, wie @Brann hervorhob. Ich verwende den folgenden Befehl, um herauszufinden, welches Projekt die Einstellung hat: c: \ MyProjects> findstr / s / m "3D9AD99F-2412-4246-B90B-4EAA41C64699" * .csproj
wcb1

4

Einige Blogs sagen, dass dies möglicherweise passiert ist, weil das Projekt aus einem anderen Zweig kopiert wurde, wodurch GUIDs überschrieben werden. Löschen Sie sie einfach, wie in diesem Blog erläutert .


Von VS2015 entfernen de Guid, ging das Projekt ungültig
Hugo

1

Dieser Fehler kann auch durch einen falschen Dienstnamen in Ihrer Konfigurationsdatei verursacht werden:

<system.serviceModel>
    <services>
      <service name="MyServiceLibrary.WrongServiceName">
...

Überprüfen Sie Ihre Konfigurationsdatei und stellen Sie sicher, dass der Dienstname korrekt ist.


1

Alter Faden. Entfernen Sie einfach alle Befehlszeilenargumente aus dem Abschnitt Debug in den Optionen. Das hat mir geholfen.


1

Ich habe auch die gleiche Art von Problem durchlaufen und stundenlang gesucht, um diesen speziellen Fehler zu beseitigen. Endlich habe ich einen Ausweg gefunden.

Wenn Sie auf dieses spezielle Problem stoßen, versuchen Sie , Ihre Server- und Clientanwendung als Administrator auszuführen und die WPF-Eigenschaften des Projekts zu ändern .

Wenn Sie auf die WPF-Eigenschaften des Projekts klicken, finden Sie eine Erstellungsoption. In der Build-Option gibt es eine Option namens PLATFORM TARGET , mit der Sie das Plattformziel in x86 ändern können . Beachten Sie auch , dass im Falle von x84 , können Sie es setzen müssen x84 .

Führen Sie nun Ihr Projekt von der Konsole aus , dh gehen Sie zu dem Ordner, in dem Ihre Projekte gespeichert sind, und im Bin des Clients finden Sie ein Ordner- Debug, in dem Sie Ihre Konsolenanwendung erhalten . Sie sollten nun in der Lage sein, die Anwendung erfolgreich auszuführen.


0

Hinzufügen einer weiteren Lösung, da diese Nachricht mehrere Ursachen zu haben scheint. Durch Entfernen der folgenden GUID aus dem ProjectTypeGuids-Tag in der Projektdatei wurde das Problem behoben.

<ProjectTypeGuids>{3D9AD99F-2412-4246-B90B-4EAA41C64699}</ProjectTypeGuids>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.