Jeg arbejdede på en funktion i sidste uge, som vil tilføje nogle hændelsesmodtagere til en bestemt liste forekomst. (Jeg blogges lidt om at listen modtager her).
Ved hjælp af kommandolinjen, Jeg kunne installere funktionen med ingen fejl (Men se nedenfor for de skjulte fejl). Da jeg prøvede at installere funktionen på webstedet, MOSS klagede over en "FileNotFoundException" fejl. Dette blogindlæg beskriver, hvordan jeg løst det.
Indeværende er den fejl, at MOSS viste mig i webbrowseren:
Funktionen ' b2cb42e3-4f0a-4380-Hanss-1ef9cd526f20’ kunne ikke installeres, fordi indlæsning af begivenhed receiver forsamling "xyzzyFeatureReceiver_0" mislykkedes: System.IO.FileNotFoundException: Kunne ikke indlæse filen eller assemblyen ' xyzzyFeatureReceiver_0’ eller en af dens afhængigheder. Systemet kan ikke finde den angivne fil.
Filnavn: ' xyzzyFeatureReceiver_0’
på System.Reflection.Assembly.nLoad(AssemblyName filnavn, Streng codeBase, Beviser assemblySecurity, Assemblyen locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
på System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Beviser assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
på System.Reflection.Assembly.InternalLoad(Strengen assemblyString, Beviser assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
på System.Reflection.Assembly.Load(Strengen assemblyString)
på Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
WRN: Forsamling bindende logføring er slået fra.
Du aktiverer forsamling binder fiasko logføring, indstille registreringsdatabaseværdien [HKLMSoftwareMicrosoftFusion!EnableLog] (DWORD) til 1.
Bemærk: Der er nogle ydeevne sanktion tilknyttet forsamling binder fiasko logføring.
Slå denne funktion fra, ophæve den indskrive værdi [HKLMSoftwareMicrosoftFusion!EnableLog].
Jeg ved, hvordan man bevidst forårsage denne fejl: ikke installere assemblyen i GAC. Men, Det var i GAC. Jeg installere normalt forsamlinger i GAC ved at trække dem til c:\windowsassembly mappe ved hjælp af windows Stifinder. Jeg har aldrig følt 100% komfortable gør, fordi jeg altid troet, at gacutil eksisteret en grund … så jeg prøvede at. Det gjorde ingen forskel.
Jeg søgte Internets og fandt dette indlæg: http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=2243677&SiteID=1
Plakaten tilfældigvis skal bruge den samme rod bit kode (fra bogens inde WSS fra denne liste) så det var et lovende tegn. Dog, forslaget om udsmykning forsamling med et [forsamling: ] direktiv giver ikke mening for mig. Jeg prøvede det alligevel og jeg havde ret. Det gjorde ingen forskel.
Så jeg bemærket, at min klassedefinitionen ikke var offentlige. Jeg gjorde det offentlige og det gjorde ingen forskel.
Næste, Jeg gik til besværet med at aktivere "forsamling binder fejl log" (på grundlag af nyttige og præcise instruktioner) og dette er, hvor ting begyndte at blive interessant. Denne log viser mig, at runtime søger overalt på den pågældende server til min samling. Det synes selv at være at søge efter det i mit medicinskabet. Men … det vil ikke søge efter det i GAC.
Jeg sætter på min vinterjakke og gå søger Internets igen og finde, at nogen har haft dette problem også. Den langvarige diskussion i denne udstationering peters off i noget og jeg kan ikke finde en løsning.
Jeg flytter min samling til et af de steder log hævder det søger og jeg komme lidt videre. Jeg er belønnet med en ny fejl i browseren, når jeg forsøger at aktivere funktionen:
Det mislykkedes at oprette funktion modtager objektet fra forsamlingen "xyzzyFeatureReceiver_0", Skriv "Conchango.xyzzyFeatureReceiver" for funktionen b2cb42e3-4f0a-4380-aaba-1ef9cd526f20: System.ArgumentNullException: Værdi må ikke være null.
Parameternavnet: type
på System.Activator.CreateInstance(Type type, Boolean nonPublic)
på System.Activator.CreateInstance(Type type)
på Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
Tid til en sidste tur til Internets!
Denne gang jeg finde ud af, forudsigeligt nok, at MOSS spørgsmål denne fejl, fordi assemblyen ikke er i GAC.
Jeg ønsker at få noget positivt ud af det og forsøge at være lidt stolt, at jeg har lavet den Diffus MSIL forsamlinger, men det er ikke i orden. Jeg er bare plain irriteret. Jeg befinder mig mumler "hønen eller ægget" under min ånde.
Jeg endelig beslutter at punt. Jeg oprette et helt nyt projekt og copy/paste koden fra incredible-cloaked-from-the-GAC-assembly ikke-arbejdende projektet over dette nye projekt. (Jeg søger en bygge flag kaldes noget som "Skjul fra assemblyen bindende, hvis installeret i GAC" men kan ikke finde en).
Jeg installere funktionen og aktivere den og … det virker! Så, efter alle, Jeg måtte dybest set ' genstarte’ mit projekt. Dette er en anden grund til hvorfor jeg hader computere.
Jeg har lære noget nyttigt fra dette. Jeg havde installation af funktioner ved hjælp af kommandolinjen stsadm hele dagen lang og brugt den "-kraft" indstilling ud af vane. For anden grund, Jeg ikke bruger - kraft valgmulighed da jeg installerede det nye projekt. Denne gang, Jeg gjorde faktisk, virkelig Glem at kopiere dette nye projekt assembly til GAC. Som et resultat, Jeg fik denne "FielNotFoundException" fejl. Denne gang, Jeg fik det fra stsadm, ikke, når jeg prøvede at aktivere funktionen via en webbrowser. Så, -kraft faktisk spiller to roller. Gør det muligt at re-installere en eksisterende funktion. Det giver også mulighed for at installere en buggy funktion, der ikke kan arbejde på kørselstidspunktet ved at undertrykke fejlen. Det siger nok så meget i hjælp til et eller andet sted, men jeg lagt mærke aldrig til det.
</slutningen>
Også, Jeg havde min 2 timer af hysteric nintendoSIXTYFOURRRR-i-en-dårlige-vejs øjeblikke hvor jeg omdøbt Namespace på funktion modtager, til at holde styr på hvor din egen eller andres begyndte.
Roden til problemet ligger på den indsatte wsp i sharepoint-database. Jeg læste dit indlæg, og mens det ja lave opgave har vi en kæmpe løsning med flere projekter, og snesevis af filer så flytter alt var ikke en mulighed.
Ligegyldigt hvor meget opdaterer du din GAC eller din samling, hvad giver dig problemer er forsamlingen i den nuværende WSP installeret på sharepoint.
Du kan let bemærket, at ved at forsøge at kun trække løsningen (der er, hvor fejlen sker). Alt sker på "tilbagetrækningskraften tid" bør betragtes som "indsatte wsp"-kun ikke selve projektet.
Min løsning var:
– Central administration: Annuller løsning
– stsadm: deletesolution
– Visual Studio => Projektet => Pakke
– stsadm: addsolution-fil ProjectbinDebugProject.wsp
– stsadm: deploysolution-name project.wsp-omgående - allowgacdeployment-kraft
– Visual Studio => Implementere
Jeg har også slettet bin og debug mapperne fra projektet før du kører installation igen, måske ikke har nogen effekt, men værd at kommentere.
Dette virker for både
"Indslag … kunne ikke installeres, fordi indlæsning af begivenhed receiver forsamling"
og
"Kunne ikke oprette funktion modtager objektet fra forsamlingen"
Tak!
Francisco
Har lige brugt et par timer forsøger at løse dette samme problem og har fundet en bedre løsning end blot genskaber projektet.
Det viste sig, at for nogle grund til Visual Studio havde sat opbygge mål x 86 i stedet for x 64 eller MSIL – forsamlingen var i GAC, bare ikke den samme GAC, 64 bit SharePoint ledte.