J'ai une application MVC 4 qui s'exécute localement mais échoue avec ce message lorsqu'elle est déployée sur Azure:
[FileNotFoundException: Could not load file or Assembly Microsoft.WindowsAzure.ServiceRuntime, Version=1.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.]
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.GetDefaultStartupInfoForCurrentRoleInstance() +0
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener..ctor() +40
Je me suis assuré d’avoir référencé Microsoft.WindowsAzure.ServiceRuntime version 1.8 et de le configurer pour une copie locale.
Ainsi, à partir de votre capture d'écran, il semble que vous ayez créé un site Web (qui n'est ni un service cloud ni un rôle Web). Les assemblys Microsoft.WindowsAzure.Diagnostics et Microsoft.WindowsAzure.ServiceRuntime ne peuvent pas être utilisés dans un site Web.
Si vous souhaitez créer un rôle Web, ouvrez Visual Studio> Fichier> Nouveau projet> Cloud> Service Cloud Windows Azure> Ajouter un rôle Web MVC> OK. Une fois que vous avez terminé, cliquez avec le bouton droit sur le projet Azure et choisissez Publier . Cela vous permettra de créer un nouveau service de cloud qui contiendra votre rôle Web. Et si vous créez votre projet de cette façon, vous pourrez utiliser les assemblages Microsoft.WindowsAzure.Diagnostics et Microsoft.WindowsAzure.ServiceRuntime .
Vérifiez les références dans votre projet et assurez-vous que toutes les références Azure sont marquées Copier Local = True. De plus, étant donné que l'application recherche la version 1.8 d'exécution, vous utilisez évidemment au moins un assembly du SDK 1.8 - C:\Program Files\SDK Microsoft\Windows Azure.NET SDK\2012-10\ref ... REMARQUE: 2012-10 . Puis vérifiez les versions de référence utilisées:
Cette erreur d'assemblage se produit généralement du fait que vous avez différentes versions du SDK référencées et/ou que vos références ne sont pas marquées copy local = true.
En ce qui concerne la taxonomie Azure, il existe des sites Web (sur le portail, sous sites Web) et des services Cloud pouvant avoir des rôles WebRoles (sites Web, services wcf) ou WorkerRoles (traitement en arrière-plan).
Pour CloudServices, la famille de systèmes d'exploitation et GuestOS sont spécifiés dans le fichier ServiceConfiguration.cscfg de l'élément "ServiceConfiguration":
<ServiceConfiguration serviceName="MyWebRole" xmlns="http://schemas.Microsoft.com/ServiceHosting/2008/10/ServiceConfiguration" osFamily="3" osVersion="*" schemaVersion="2012-10.1.8">
osFamily 2 = Server 2008R2 et 3 = Server 2012. L'osVersion spécifie le GuestOS et doit presque toujours être "*" pour la dernière version.
Si tout échoue et que le DLL correct est affiché dans la corbeille, essayez d'ajouter une redirection de liaison à l'assembly dans le fichier web.config:
<dependentAssembly>
<assemblyIdentity name="Microsoft.WindowsAzure.ServiceRuntime" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
</dependentAssembly>
Puisque vous obtenez l'erreur en essayant de démarrer DiagnosticMonitor, pouvez-vous vérifier que vous faites référence à la version 1.8 de Microsoft.WindowsAzure.Diagnostics aussi?
Il doit être situé à l'emplacement suivant: C:\Program Files\Microsoft SDK\Windows Azure.NET SDK\2012-06\ref.