Warum wurde mein benutzerdefinierter WCF-Verhaltenserweiterungselementtyp nicht gefunden?

Ich habe eine Lösung, die zwei Projekte enthält. Ein Projekt ist ein ASP.NET-Webanwendungsprojekt, und eines ist eine Klassenbibliothek. Die Webanwendung verfügt über einen Projektverweis auf die Klassenbibliothek. Keiner von diesen ist stark benannt.

In der Klassenbibliothek, die ich "Framework" nennen werde, habe ich ein Endpunktverhalten (eine IEndpointBehavior-Implementierung) und ein Konfigurationselement (eine von BehaviorExtensionsElement abgeleitete Klasse). Das Konfigurationselement ist, damit ich das Endpunktverhalten über die Konfiguration an einen Dienst anhängen kann.

In der Webanwendung habe ich einen AJAX-fähigen WCF-Dienst. In web.config ist der AJAX-Dienst so konfiguriert, dass mein benutzerdefiniertes Verhalten verwendet wird. Der Abschnitt system.serviceModel der Konfiguration ist ziemlich standardmässig und sieht folgendermaßen aus:

<system.serviceModel>
 <behaviors>
  <endpointBehaviors>
   <behavior name="MyEndpointBehavior">
    <enableWebScript />
    <customEndpointBehavior />
   </behavior>
  </endpointBehaviors>
 </behaviors>
 <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
 <services>
 <service name="WebSite.AjaxService">
  <endpoint
           address=""
           behaviorConfiguration="MyEndpointBehavior"
           binding="webHttpBinding"
           contract="WebSite.AjaxService" />
  </service>
 </services>
 <extensions>
  <behaviorExtensions>
   <add
       name="customEndpointBehavior"
       type="Framework.MyBehaviorExtensionsElement, Framework, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
  </behaviorExtensions>
 </extensions>
</system.serviceModel>

Zur Laufzeit funktioniert dies einwandfrei. Der AJAX-fähige WCF-Dienst verwendet mein benutzerdefiniertes Endpunktverhalten ordnungsgemäß.

Das Problem ist, wenn ich versuche, einen neuen AJAX-WCF-Dienst hinzuzufügen. Wenn ich Add -> New Item ... (Hinzufügen -> Neues Element) auswähle und "AJAX-enabled WCF Service" (AJAX-fähiger WCF-Dienst) auswähle, kann ich beobachten, wie die .svc-Datei und der Codebehind hinzugefügt werden. Beim Aktualisieren der Datei web.config wird jedoch der folgende Fehler angezeigt:

Die Konfigurationsdatei ist keine gültige Konfigurationsdatei für die WCF-Dienstbibliothek.

Der für die Erweiterung 'customEndpointBehavior' registrierte Typ 'Framework.MyBehaviorExtensionsElement, Framework, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = null' konnte nicht geladen werden.

Offensichtlich ist die Konfiguration vollständig gültig, da sie zur Laufzeit einwandfrei funktioniert. Wenn ich das Element vorübergehend aus meiner Verhaltenskonfiguration entferne und dann den AJAX-fähigen WCF-Dienst hinzufüge, funktioniert alles problemlos.

Leider ist es in einem größeren Projekt, in dem mehrere Services mit verschiedenen Konfigurationen zur Verfügung stehen, fehleranfällig, alle benutzerdefinierten Verhaltensweisen vorübergehend zu entfernen. Mir ist zwar klar, dass ich ohne den Assistenten auskommen und alles manuell ausführen könnte, aber nicht jeder. Es wäre schön, wenn ich das Produkt so verwenden könnte, wie es eigentlich verwendet werden sollte - Assistenten und alles.

Warum wurde mein benutzerdefinierter WCF-Verhaltenserweiterungselementtyp nicht gefunden?

Aktualisierungen / Klarstellungen:

Es funktioniert zur Laufzeit, nur nicht zur Entwurfszeit.Die Framework-Assembly befindet sich im Ordner bin des Webprojekts, wenn ich versuche, den Dienst hinzuzufügen.Während ich Dienste manuell hinzufügen konnte ("ohne Konfiguration"), brauche ich die sofort einsatzbereite Elementvorlage, um zu funktionieren - das ist das ganze Ziel der Frage.Dieses Problem tritt in Visual Studio 2008 auf.In VS 2010 scheint dies behoben zu sein.

Ich habe dieses Problem bei Microsoft Connect eingereicht und es stellt sich heraus, dass Sie entweder Ihr benutzerdefiniertes Konfigurationselement im GAC oder im IDE-Ordner ablegen müssen. Sie werden es zumindest vorerst nicht reparieren. Ich habe die von ihnen bereitgestellte Problemumgehung als "Antwort" auf diese Frage veröffentlicht.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage