Ich arbeitete an einem Feature letzte Woche, die einige Ereignisempfänger eine bestimmte Listeninstanz hinzufügen würde. (Ich ein bisschen gebloggt die Liste Empfänger hier).
Mithilfe der Befehlszeile, Ich konnte die Funktion ohne Fehler installieren. (siehe unten für den versteckten Fehler). Als ich versuchte, die Funktion auf der Website bereitstellen, MOSS klagte über eine "FileNotFoundException" Fehler. Dieser Blog-Eintrag beschreibt, wie ich es gelöst.
Das ist der Fehler, den MOSS mir im Web-Browser zeigte:
Funktion "b2cb42e3-4f0a-4380-Aaba-1ef9cd526f20’ konnte nicht installiert werden, da das Laden von Ereignisempfängerassembly "xyzzyFeatureReceiver_0" Fehler: System.IO.FileNotFoundException: Konnte nicht geladen werden Datei oder Assembly ' xyzzyFeatureReceiver_0’ oder eine ihrer Abhängigkeiten. Das System kann die angegebene Datei nicht finden.
Dateiname: ' xyzzyFeatureReceiver_0’
bei System.Reflection.Assembly.nLoad(AssemblyName fileName, Zeichenfolge Codebasis, Beweise assemblySecurity, Montage locationHint, StackCrawlMark& stackMark, Boolesche throwOnFileNotFound, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Beweise assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.InternalLoad(String assemblyString, Beweise assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
bei System.Reflection.Assembly.Load(String assemblyString)
bei Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Assembly Bindung Protokollierung aktiviert ist OFF.
Montage-Bind Fehler Protokollierung, Legen Sie den Registrierungswert [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) An 1.
Hinweis: Es gibt einige Leistungseinbußen verbunden mit Montage Bind Fehler Protokollierung.
Um dieses Feature zu deaktivieren, Entfernen Sie den Registrierungswert [HKLMSoftwareMicrosoftFusion!EnableLog].
Ich weiß wie man bewusst, dass Fehler verursachen: nicht die Assembly im GAC zu installieren. Aber, Es war im GAC. Ich installiere normal Assemblys im GAC durch Ziehen in die c:\Windowsassembly Ordner mithilfe von Windows_explorer. Ich habe nie das Gefühl 100% komfortable tun, denn ich immer, dass Sie Gacutil dachte bestand aus einem Grund … Also versuchte ich, die. Es machte keinen Unterschied.
Ich suchte den Internets und fanden diesen Beitrag: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
Das Plakat geschah das gleiche Wurzel Bit des Codes zu verwenden (aus dem Buch Inside WSS aus dieser Liste) also das war ein Zeichen der Hoffnung. Jedoch, die Anregung der Dekoration der Assembly mit einem [Versammlung: ] Richtlinie machen nicht für mich Sinn.. Ich versuchte es trotzdem und ich hatte Recht. Es machte keinen Unterschied.
Dann bemerkte ich, dass meine Klassendefinition nicht öffentlichen war. Ich es öffentlich gemacht und das machte keinen Unterschied.
Nächste, Ich ging auf die Mühe, das "Versammlung Bind Fehler-Log aktivieren" (Das hilfreiche und genaue Anweisungen zur Verfügung gestellt) und das ist, wo Dinge begonnen, interessant zu werden. Das Protokoll zeigt mir, dass die Common Language Runtime überall auf diesem Server für meine Montage sucht. Es scheint sogar, es in meiner Hausapotheke auf der Suche nach. Aber … Es wird nicht im GAC suchen.
Ich habe auf meine Winterjacke und gehen wieder die Internets suchen und finden, dass jemand dieses Problem auch gehabt hat. Die endlosen Diskussionen in diesem Beitrag peters aus ins nichts und ich kann keine Lösung finden.
Ich bewege meine Montage zu einem der Orte, die das Protokoll behauptet, es ist auf der Suche und ich ein wenig mehr Fortschritte machen. Ich werde belohnt mit einem neuen Fehler im Browser beim Versuch, das Feature aktivieren:
Fehler beim Erstellen der Funktion Empfängerobjekt aus Assembly "xyzzyFeatureReceiver_0", Geben Sie "Conchango.xyzzyFeatureReceiver" für die Funktion b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Wert darf nicht null sein..
Parameternamen: Typ
bei System.Activator.CreateInstance(Typ, Boolean nonPublic)
bei System.Activator.CreateInstance(Typ)
bei Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Zeit für eine letzte Reise zu den Internets!
Diesmal ich herausfinden, vorhersehbar genug, dass MOSS dieser Fehler ausgibt, da die Assembly im GAC nicht ist.
Ich möchte etwas Positives aus dieser erhalten und versuchen, ein wenig stolz, dass ich erstellt habe die Auf der Flucht von MSIL-Assemblys, aber es funktioniert nicht. Ich bin einfach nur genervt. Ich finde mich murmelte "Huhn oder das Ei" unter meinen Atem.
Ich entscheide mich schließlich, punt. Ich ein völlig neues Projekt erstellen und kopieren den Code aus dem incredible-cloaked-from-the-GAC-assembly der arbeitsfreien Projekt über dieses neue Projekt. (Ich Suche ein Build-Flag aufgerufen, so etwas wie "Hide aus Assemblybindung im GAC installiert" aber man kann nicht).
Ich das Feature installieren und aktivieren Sie es und … Es funktioniert! Also, nach all dem, Ich musste im Grunde ' neu starten’ mein Projekt. Dies ist ein weiterer Grund, warum ich Computer hasse.
Ich habe etwas nützliches daraus lernen. Ich hatte die Installation Features mithilfe der Befehlszeile Stsadm ganztägig und benutze den "-zwingen" Möglichkeit aus Gewohnheit. Aus irgendeinem Grund, Ich habe nicht verwenden die - Force-Option aus, wenn ich das neue Projekt angelegt. Dieses Mal, Ich habe, wirklich vergessen Sie, dieses neue Projekt Assembly im GAC kopieren. Als Folge, Ich erhielt die FielNotFoundException"" Fehler. Dieses Mal, Ich habe es von stsadm, nicht, als ich versuchte, das Feature über den Webbrowser aktivieren. Also, -Kraft spielt eigentlich zwei Rollen. Es erlaubt Ihnen, ein vorhandenes KE neu installieren. Darüber hinaus können Sie eine fehlerhafte Funktion zu installieren, die nicht arbeiten durch die Unterdrückung des Fehlers zur Laufzeit. Es sagt wohl so viel in der Hilfe irgendwo aber ich nie bemerkt, dass es.
</Ende>
Auch, Ich hatte meine 2 Stunden der hysterischen NintendoSIXTYFOURRRR-in-a-schlecht-Weg Momente, wenn ich die Namespace auf die Feature-Ereignisempfänger umbenannt,, mit deren Hilfe nachverfolgt begann wo Ihnen oder jemand anderes.
Die Wurzel des Problems liegt auf der bereitgestellten Wsp in der Sharepoint-Datenbank. Ich habe Ihren Beitrag und während es in der Tat das Problem beheben lässt, haben wir eine große Lösung mit mehreren Projekten und Dutzende von Dateien verschieben also alles war keine option.
Egal wie viel Sie Ihre GAC oder die Assembly aktualisieren, Was ist Ihnen das Problem ist die Assembly in die aktuelle WSP für Sharepoint installiert.
Sie können leicht bemerkt, dass versucht wird, nur die Lösung zurückziehen (Das ist, wo der Fehler passiert). Alles geschieht pünktlich"zurückziehen" "bereitgestellten Wsp" gezogen werden-nur nicht das Projekt selbst.
Meine Lösung war:
– Zentrale admin: Abbrechen-Lösung
– Stsadm: Deletesolution
– Visual Studio => Projekt => Paket
– Stsadm: Addsolution-Datei ProjectbinDebugProject.wsp
– Stsadm: Deploysolution-Name project.wsp-sofortige – Allowgacdeployment-zwingen
– Visual Studio => Bereitstellen
Ich auch bin und Debug Ordner aus dem Projekt gelöscht bevor Sie bereitstellen erneut ausführen, könnte nicht wirken aber Wert kommentieren.
Dies funktioniert für beide
"Feature … konnte nicht installiert werden, da das Laden von Ereignisempfängerassembly"
und
"Fehler beim Erstellen von Feature-Empfängerobjekt aus assembly"
Vielen Dank!
Francisco
Verbrachte ein paar Stunden versucht, dieses Problem zu beheben und eine bessere Lösung als einfach Neuerstellen des Projekts gefunden.
Es stellte sich heraus, dass aus irgendeinem Grund kann Visual Studio das Ziel erstellen auf X 86 anstelle von x 64 oder MSIL gesetzt hatte – die Assembly wurde im GAC, nicht nur die gleichen GAC, 64 bisschen SharePoint suchte.