Vor kurzem wollte ich ein etwas älteres Windows Azure Cloud Service Projekt upgraden und weiterentwickeln. Beim dem Projekt handelt es sich um eine Website die mit dem Juni 2012 SDK (Version 1.7) entwickelt wurde. Deshalb hab ich erst einmal alle Referenzen im Projekt geupdatet, damit ich Version 1.8 (Oktober 2012) des SDKs benutzen kann. Man möchte ja immer auf dem aktuellsten Stand bleiben. 😉

Das Upgrade verlief reibungslos, was dank NuGet auch nicht besonders schwierig ist, und die Website lief auch noch wunderbar mit dem Emulator und dem IIS Express. Beim Aufruf der Website in Azure kam es aber zu diesem Fehler:

Could not load file or assembly ‚msshrtmi, Version=1.7.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35‘ or one of its dependencies. The system cannot find the file specified.

Sucht man bei Google nach „msshrtmi“ findet man einige Beiträge zu diesem Thema.
In den meisten wird beschrieben, dass man das Projekt aufräumen soll und in der Projektdatei (csproj-Datei) sämtliche PlatformTarget-Einträge herauslöschen sollte. Zusätzlich muss die Datei msshrtmi.dll per MS-Build in den bin-Ordner der WebApplication kopiert werden.

Bei mir hat das alles nicht funktioniert.
Deshalb hab ich ein bisschen in meiner web.config herumgespielt. Und das mit Erfolgt!
Hat man die msshrtmi-Assembly („C:Program FilesMicrosoft SDKsWindows Azure.NET SDK2012-10binruntimesbasex64msshrtmi.dll“ beim Oktober 2012 SDK) als Referenz zum Projekt hinzugefügt reicht ein Eintrag für ein Assembly Binding von Version 1.8 auf die Version 1.7!

<dependentAssembly>
	<assemblyIdentity name="msshrtmi" publicKeyToken="31bf3856ad364e35" />
	<bindingRedirect oldVersion="1.0.0.0-1.8.0.0" newVersion="1.8.0.0" />
</dependentAssembly>

Danach lief meine Website wieder wie gewollt.
Mehr Infos zu Assembly Bindings gibts in der MSDN unter http://msdn.microsoft.com/library/vstudio/dd255412.

Ich hoffe ich konnte dem ein oder anderen mit diesem Tip helfen.
Noch viel Spaß mit Windows Azure!