Ik was bezig met een functie vorige week dat sommige ontvangers gebeurtenis aan een specifieke lijst exemplaar toevoegen zou. (Ik geblogd een beetje over die lijst ontvanger hier).
Via de opdrachtregel, Mij konden installeren de functie met geen fout (maar zie hieronder voor de verborgen fout). Toen ik probeerde om het implementeren van de functie op de site, MOSS klaagde over een "FileNotFoundException" fout. Deze blog entry beschrijft hoe ik heb het opgelost.
Dit is de fout die MOSS me in de webbrowser liet:
Functie ' b2cb42e3-4f0a-4380-sequence-1ef9cd526f20’ kan niet worden geïnstalleerd omdat het laden van gebeurtenis ontvanger montage "xyzzyFeatureReceiver_0" is mislukt: System.io.FileNotFoundException: Kan niet laden bestand of vergadering ' xyzzyFeatureReceiver_0’ of één van zijn gebiedsdelen. Het systeem kan het opgegeven bestand niet vinden.
Bestandsnaam: ' xyzzyFeatureReceiver_0’
op System.Reflection.Assembly.nLoad(AssemblyName bestandsnaam, Tekenreeks codeBase, Bewijs assemblySecurity, Vergadering locationHint, StackCrawlMark& stackMark, Booleaanse throwOnFileNotFound, Booleaanse forIntrospection)
op System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Bewijs assemblySecurity, StackCrawlMark& stackMark, Booleaanse forIntrospection)
op System.Reflection.Assembly.InternalLoad(String assemblyString, Bewijs assemblySecurity, StackCrawlMark& stackMark, Booleaanse forIntrospection)
op System.Reflection.Assembly.Load(String assemblyString)
op Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Vergadering bindende logboekregistratie is ingeschakeld OFF.
Vergadering bind mislukking logboekregistratie inschakelen, instellen van de registerwaarde [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) Aan 1.
Opmerking: Er is enige prestatiessanctie die zijn gekoppeld aan de assemblage bind mislukking logboekregistratie.
Deze functie uitschakelen, de registerwaarde verwijderen [HKLMSoftwareMicrosoftFusion!EnableLog].
Ik weet hoe te het opzettelijk veroorzaken die fout: de vergadering niet installeren in de GAC. Maar, het was in de GAC. Ik installatie normaal van assembly's in de GAC door ze te slepen in de c:\windowsassembly map met behulp van windows verkenner. Ik heb nooit gevoeld 100% comfortabel dat te doen want ik heb altijd gedacht dat gacutil bestond voor een reden … dus ik dat probeerde. Het maakte geen verschil.
Ik zocht de Internets en vond dit bericht: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
De poster is er gebeurd met de dezelfde wortel bits van code gebruiken (uit het boek binnen WSS uit deze lijst) dus dat een hoopvol teken was. Echter, de suggestie van het verfraaien van de vergadering met een [vergadering: ] richtlijn zinvol niet voor mij. Ik probeerde het toch en ik had gelijk. Het maakte geen verschil.
Dan merkte ik dat mijn klassendefinitie niet openbaar was. Ik maakte het publiek en dat maakte geen verschil.
Volgende, Ik ging naar het probleem van de "vergadering bind mislukking log inschakelen" (naar aanleiding van de nuttige en nauwkeurige instructies geboden) en dit is waar de dingen begonnen om interessante. Dit logboek toont me dat de runtime overal op die server voor mijn vergadering zoeken is. Het lijkt zelfs zoeken naar het in mijn medicijnkastje. Maar … het zal niet zoeken naar het in de GAC.
Ik zette mijn winter jas en de Internets opnieuw gaan zoeken en vinden dat iemand dit probleem te heeft. De lange discussie in dat bericht peters uit in het niets en ik kan niet het vinden van een oplossing.
Ik verplaatst mijn vergadering naar een van de plaatsen die het logboek beweert het op zoek en ik een beetje meer vooruitgang. Ik ben beloond met een nieuwe fout in de browser wanneer ik probeer om de functie te activeren:
Functie ontvanger object het maken van vergadering "xyzzyFeatureReceiver_0" is mislukt, type "Conchango.xyzzyFeatureReceiver" voor de functie b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Waarde kan niet null.
Parameternaam: type
op System.Activator.CreateInstance(Type type, Boolean nonPublic)
op System.Activator.CreateInstance(Type type)
op Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Tijd voor een laatste reis naar de Internets!
Deze keer ik erachter, voorspelbaar genoeg, dat MOSS deze fout problemen omdat de assemblage zich niet in de GAC.
Ik wil te krijgen iets positief uit dit en probeer te voelen een beetje trots op dat ik heb gemaakt de Vluchteling van assemblages MSIL, maar het werkt niet. Ik ben gewoon geïrriteerd. Ik vind mezelf mompelen "kip of het ei" onder mijn adem.
Tot slot besluit ik om punt. Ik maak een geheel nieuw project en kopieer/plak de code van de incredible-cloaked-from-the-GAC-assembly niet-werkende project over aan dit nieuwe project. (Ik zoek een build vlag met de naam iets als "verbergen van vergadering bindend als geïnstalleerd in de GAC" maar kan niet vinden).
Ik installeer de functie en het activeren en … het werkt! Dus, na al dat, Ik moest eigenlijk ' opnieuw opstarten’ mijn project. Dit is een andere reden waarom ik computers haat.
Ik leerde iets nuttigs hieruit. Ik had het installeren van functies met behulp van de opdrachtregel stsadm hele dag lang en met behulp van de "-kracht" optie uit gewoonte. Voor sommige reden, Ik heb geen gebruik de - force optie toen ik het nieuwe project installeerde. Deze keer, Ik deed eigenlijk, echt vergeten vergadering van dit nieuwe project kopiëren naar de GAC. Als een resultaat, Ik kreeg die "-FielNotFoundException" fout. Deze keer, Ik heb het uit stsadm, niet toen ik probeerde om de functie via de webbrowser te activeren. Dus, -kracht speelt eigenlijk twee rollen. Hiermee kunt u een bestaande functie opnieuw te installeren. Ook kunt u een buggy voorziening die door het onderdrukken van de fout werkt niet tijdens runtime te installeren. Het zegt waarschijnlijk zo veel in de help van ergens, maar ik merkte nooit het.
</einde>
Ook, Ik had mijn 2 uur van hysteric nintendoSIXTYFOURRRR-in-a-slecht-way momenten wanneer mij de Namespace op de functie-ontvanger verdopen, om te helpen bijhouden waar jou of iemand anders begon.
De kern van het probleem is op de geïmplementeerde wsp in de sharepoint-database. Ik lees uw bericht en terwijl het inderdaad het probleem bevestigen we hebben een enorme oplossing met een aantal projecten en tientallen bestanden verplaatsen dus alles was niet een optie.
Maakt niet uit hoeveel bijwerken u uw GAC of uw vergadering, Wat is jullie probleem is de vergadering in de huidige WSP geïnstalleerd op sharepoint.
U kunt gemakkelijk gemerkt dat door te proberen om alleen trekken de oplossing (dat is waar de fout gebeurt). Alles gebeurt op "intrekken tijd" moet worden beschouwd als "ingezet wsp"-niet alleen het project zelf.
Mijn workaround was:
– Centrale admin: Annuleren oplossing
– Stsadm: deletesolution
– Visual Studio => Project => Pakket
– Stsadm: addsolution-bestand ProjectbinDebugProject.wsp
– Stsadm: deploysolution-naam project.wsp-onmiddellijk - allowgacdeployment-force
– Visual Studio => Implementeren
Ik heb ook verwijderd de bin en foutopsporing mappen uit het project voordat u opnieuw distribueren, niet enig effect zou kunnen hebben maar de moeite waard commentaar.
Dit werkt voor zowel
"Feature … kan niet worden geïnstalleerd omdat het laden van gebeurtenis ontvanger montage"
en
"Failed to create functie ontvanger object van vergadering"
Bedankt!
Francisco
Net bezig geweest met een paar van uren trying voor positiebepaling zulks zelfde uitvaardiging en vond een betere oplossing dan gewoon het herscheppen van het project.
Het bleek dat voor sommige reden die Visual Studio het bouwen doel had ingesteld op x 86 in plaats van x 64 of MSIL – de vergadering werd in de GAC, gewoon niet de dezelfde GAC die 64 bits SharePoint was op zoek.