61 votes

Infâme erreur de liaison d'assemblage

J'ai vraiment besoin d'aide à ce sujet car j'ai perdu tout espoir de corriger le problème.

J'utilise les bibliothèques de l'Office Communications Server 64bit. Il y a 3 dlls que j'utilise dans le projet, Microsoft.Rtc.Collaboration.dll, Microsoft.Rtc.Internal.Media.dll et SIPEPS.dll. Je ne suis pas sûr pour Microsoft.Rtc.Collaboration mais Internal.Media et SIPEPS sont tous deux x64. Dans la liste des assemblages du GAC, Rtc.Collaboration indique MSIL sous Processor Arhitecture et les autres indiquent AMD64.

Mon projet se compile sans erreur avec ces références mais au moment de l'exécution je reçois l'erreur :

Impossible de charger le fichier ou l'assemblage 'Microsoft.Rtc.Internal.Media' ou l'une de ses dépendances. Une tentative a été faite pour charger un programme dont le format est incorrect.

J'ai essayé de compiler le projet avec le CPU réglé sur Any CPU mais rien ne change. Avec les paramètres x64 et x86, je reçois cette erreur.

Toute aide est appréciée.

MISE À JOUR : Vous trouverez ci-dessous le journal de liaison de l'assemblage.

=== Pre-bind state information ===
LOG: User = CONTOSO\elodie
LOG: DisplayName = Microsoft.Rtc.Internal.Media
 (Partial)
WRN: Partial binding information was supplied for an assembly:
WRN: Assembly Name: Microsoft.Rtc.Internal.Media | Domain ID: 9
WRN: A partial bind occurs when only part of the assembly display name is provided.
WRN: This might result in the binder loading an incorrect assembly.
WRN: It is recommended to provide a fully specified textual identity for the assembly,
WRN: that consists of the simple name, version, culture, and public key token.
WRN: See whitepaper http://go.microsoft.com/fwlink/?LinkId=109270 for more information and common solutions to this issue.
LOG: Appbase = file:///C:/Users/elodie/Documents/Visual Studio 2010/Projects/TFS/proto/Main/Source/WebBot.Web/
LOG: Initial PrivatePath = C:\Users\elodie\Documents\Visual Studio 2010\Projects\TFS\proto\Main\Source\WebBot.Web\bin
Calling assembly : (Unknown).
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Users\elodie\Documents\Visual Studio 2010\Projects\TFS\proto\Main\Source\WebBot.Web\web.config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/e3d82f59/764fa8c3/Microsoft.Rtc.Internal.Media.DLL.
LOG: Attempting download of new URL file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/e3d82f59/764fa8c3/Microsoft.Rtc.Internal.Media/Microsoft.Rtc.Internal.Media.DLL.
LOG: Attempting download of new URL file:///C:/Users/elodie/Documents/Visual Studio 2010/Projects/TFS/proto/Main/Source/WebBot.Web/bin/Microsoft.Rtc.Internal.Media.DLL.
ERR: Failed to complete setup of assembly (hr = 0x8007000b). Probing terminated.

62voto

Aligned Points 3261

J'ai eu ce problème avec ASP.NET IIS et après avoir tout essayé, j'ai activé le 32 bits pour mon pool d'applications et redémarré les pools d'applications. Cela a alors fonctionné.

Dans le gestionnaire IIS7 : Pools d'applications -> DefaultAppPool -> Paramètres avancés -> Définir "Activer les applications 32 bits" à true.

Assurez-vous également que la version .Net correcte est sélectionnée.

J'ai également défini l'ISAPI 64bit comme étant autorisé sous "ISAPI and CGI Restrictions", mais je ne suis pas sûr que cela ait aidé.

18voto

Élodie Petit Points 1199

J'ai remplacé les versions 64 bits des trois dll par leurs versions 32 bits, j'ai nettoyé le dossier des fichiers ASP.NET temporaires et j'ai compilé à nouveau. Maintenant, cela fonctionne sans problème. Merci pour votre aide.

4voto

Jaimal Chohan Points 4748

Essayez de définir la copie locale dans l'explorateur de solutions pour ces assemblages et assurez-vous qu'ils sont déposés dans le dossier spécifié dans le journal de liaison.

De plus, ils ont probablement été construits en utilisant le V2 CLR. Si c'est le cas, vous devrez activer la liaison en mode mixte en ajoutant ce qui suit à votre configuration Web/application

<configuration>
   <startup  useLegacyV2RuntimeActivationPolicy="true">
       <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

1voto

hillstuk Points 151

J'obtenais l'erreur lorsque j'essayais d'exécuter l'application web à partir de Visual Studio, mais dans mon cas, la réponse était simple. En lisant attentivement l'exception, j'ai pu constater que l'assemblage en question n'était plus utilisé par l'application mais qu'une copie se trouvait toujours dans le dossier bin. Après avoir supprimé l'assemblage incriminé, l'erreur a disparu.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X