Jag arbetade på en funktion förra veckan som skulle lägga till vissa evenemang mottagare till en specifik lista förekomst. (Jag bloggade lite om att listan mottagare här).
Med hjälp av kommandoraden, Jag kunde installera funktionen utan fel (men se nedan för dolda fel). När jag försökte använda funktionen på webbplatsen, MOSS klagade över en "FileNotFoundException" fel. Denna bloggpost beskriver hur jag löste det.
Detta är felet som MOSS visade mig i webbläsaren:
Funktionen ' b2cb42e3-4f0a-4380-Maria-1ef9cd526f20’ kunde inte installeras eftersom inläsningen av sammansättningen "xyzzyFeatureReceiver_0" misslyckades: System.IO.FileNotFoundException: Kunde inte läsa in filen eller sammansättningen ' xyzzyFeatureReceiver_0’ eller en av dess beroenden. Systemet kan inte hitta filen.
Filnamn: "xyzzyFeatureReceiver_0’
på System.Reflection.Assembly.nLoad(AssemblyName filnamn, Sträng kodbasen, Bevis assemblySecurity, Församlingen locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
på System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Bevis assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
på System.Reflection.Assembly.InternalLoad(Sträng assemblyString, Bevis assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
på System.Reflection.Assembly.Load(Sträng assemblyString)
på Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
VARN: Församlingen bindande loggningen är aktiverad OFF.
Du aktiverar montering bind fel loggning, Ange registervärdet [HKLMSoftwareMicrosoftFusion]!EnableLog] (DWORD) till 1.
Anmärkning: Det finns vissa prestanda straff är associerad med församlingen bind fel loggning.
Inaktivera den här funktionen, ta bort registervärdet [HKLMSoftwareMicrosoftFusion]!EnableLog].
Jag vet hur man medvetet orsaka detta fel: Installera inte sammansättningen i GAC. Men, Det var i den globala Sammansättningscachen. Jag installera normalt sammansättningar i den globala Sammansättningscachen genom att dra dem till c:\windowsassembly-mappen med Utforskaren. Jag har aldrig känt 100% bekväm att göra det eftersom jag alltid trott att gacutil fanns en anledning … så jag försökte att. Det gjorde ingen skillnad.
Jag sökte på Internet och hittade detta inlägg: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
Affischen råkade använda den samma rot bit kod (från inuti WSS bok från denna lista) så det var ett hoppfullt tecken. Men, förslaget att dekorera församlingen med en [församling: ] direktivet vettigt inte för mig. Jag försökte det ändå och jag hade rätt. Det gjorde ingen skillnad.
Sedan märkte jag att min klassdefinition inte var offentlig. Jag gjorde det offentliga och det gjorde ingen skillnad.
Nästa, Jag gick till problem med att aktivera "församlingen bind misslyckande loggen" (efter användbara och korrekta instruktioner) och det är där saker och ting började bli intressant. Loggen visar mig att körningsmiljön söker överallt på servern för min församling. Det verkar även vara söka efter det i min medicinskåpet. Men … Det kommer inte att söka efter den i den globala Sammansättningscachen.
Jag satte på min vinterjacka och gå söka Internetsen igen och hitta att någon har haft detta problem också. Den långa diskussionen i denna bokföring Petrus bort till ingenting och jag kan inte hitta en lösning.
Jag flyttar min församling till en av de platser loggen hävdar det söker och jag göra lite mer framsteg. Jag är belönade med en nya fel i webbläsaren när jag försöker aktivera funktionen:
Det gick inte att skapa funktionen mottagare objekt från församlingen "xyzzyFeatureReceiver_0", typ "Conchango.xyzzyFeatureReceiver" för funktionen b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Värdet får inte vara null.
Parameternamnet: typ
på System.Activator.CreateInstance(Typ typ, Booleska nonPublic)
på System.Activator.CreateInstance(Typ typ)
på Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Dags för en sista resa till Internets!
Denna gång jag reda, förutsägbart nog, att mossa frågor detta fel eftersom församlingen inte i GAC.
Jag vill få något positivt ur detta och försök att känna sig lite stolt att jag har skapat den Flyktiga MSIL församlingar, men det fungerar inte. Jag är helt enkelt irriterad. Jag finner mig själv muttrade "hönan eller ägget" under min andedräkt.
Jag slutligen besluta att punt. Jag skapar ett helt nytt projekt och klistra in koden från incredible-cloaked-from-the-GAC-assembly icke-arbetande projektet över till detta nya projekt. (Jag söker efter en bygga flagga kallas något i stil med "Dölj från församlingen bindande om installerat i GAC" men kan inte hitta en).
Jag installera funktionen och aktivera den och … det fungerar! Så, efter allt som, Jag var tvungen att i princip "pånyttfödd’ mitt projekt. Det är en anledning varför jag hatar datorer.
Jag lärde mig något nyttigt från detta. Jag hade installerat funktioner använder stsadm befalla lina hela dagen lång och använt den "-kraft" alternativet av gammal vana. Av någon anledning, Jag inte använder alternativet - force när jag installerade det nya projektet. Den här gången, Jag gjorde faktiskt, verkligen glömma att kopiera detta nya projekt sammansättningen i GAC. Som en följd, Jag fick det "FielNotFoundException" fel. Den här gången, Jag fick den från stsadm, inte när jag försökte aktivera funktionen via webbläsaren. Så, -Force faktiskt spelar två roller. Du kan installera en befintlig funktion. Du installerar en buggy funktion som inte kan arbeta vid körning genom att undertrycka felet kan också. Står förmodligen det lika mycket som hjälp någonstans men jag märkt aldrig det.
</slutet>
Också, Jag hade min 2 timmar av hysteriska nintendoSIXTYFOURRRR-i-ett-dåliga-väg stunder när jag döptes Namespace på funktionsmottagaren, för att hjälpa spåra var din eller någon annans började.
Roten till problemet ligger på den distribuerade wsp i sharepoint-databasen. Jag läste ditt inlägg och medan det går faktiskt att åtgärda problemet vi har en enorm lösning med flera projekt och massor av filer så att flytta allt inte var ett alternativ.
Oavsett hur mycket uppdatera du din GAC eller din församling, vad som ger dig problem är församlingen i den nuvarande WSP som installerats på sharepoint.
Du kan enkelt märkt att genom att försöka bara återkalla lösningen (som är där i fel händer). Allt som händer på "upprullningskraften tid" bör betraktas som "distribuerad wsp"-bara inte själva projektet.
Min lösning var:
– Central admin: Avbryt lösning
– stsadm: deletesolution
– Visual Studio => Projekt => Paketet
– stsadm: addsolution-fil ProjectbinDebugProject.wsp
– stsadm: deploysolution-namn project.wsp-omedelbara - allowgacdeployment-kraft
– Visual Studio => Distribuera
Jag också bort mapparna bin och debug från projektet innan du kör distribuera igen, kanske inte har någon effekt men värt att kommentera.
Detta fungerar för både
"Funktion … kunde inte installeras eftersom inläsningen av sammansättningen"
och
"Det gick inte att skapa funktionen mottagare objekt från församlingen"
Tack!
Francisco
Bara tillbringade ett par timmar att försöka åtgärda problemet samma och funnit en bättre lösning än helt enkelt återskapa projektet.
Det visade sig att av någon anledning Visual Studio hade satt målet bygga x 86 i stället för x 64 eller MSIL – församlingen var i GAC, bara inte samma GAC som 64 bitars SharePoint letade i.