Я прочитал об этой проблеме в нескольких других потоках как на StackOverflow, так и на других сайтах. Ни одно из других решений не решило мою проблему, и большинство из них устарели, ссылаясь на старые версии Azure SDK.
У меня есть обычная роль веб-сайта Azure, развернутая в Azure, которая использует Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener
для регистрации сообщений трассировки. Когда происходит трассировка, кажется, что DiagnosticMonitorTraceListener
использует класс RoleEnvironment
, который, в свою очередь, пытается загрузить явно несуществующий msshrtmi.dll
. Вот часть трассировки стека, которая записывается в файловую систему в Azure:
[FileNotFoundException: Could not load file or assembly 'msshrtmi, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.]
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.InitializeEnvironment() +0
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment..cctor() +747
[TypeInitializationException: The type initializer for 'Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment' threw an exception.]
Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.get_IsAvailable() +0
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitor.GetDefaultStartupInfoForCurrentRoleInstance() +23
Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener..ctor() +34
[ConfigurationErrorsException: Could not create Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.2.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.]
System.Diagnostics.TraceUtils.GetRuntimeObject(String className, Type baseType, String initializeData) +9004943
System.Diagnostics.TypedElement.BaseGetRuntimeObject() +110
System.Diagnostics.ListenerElement.GetRuntimeObject() +989
System.Diagnostics.ListenerElementsCollection.GetRuntimeObject() +252
System.Diagnostics.TraceInternal.get_Listeners() +331
System.Diagnostics.TraceInternal.WriteLine(String message) +161
Microsoft.WindowsAzure.AzureApplicationSettings..ctor() +437
Microsoft.WindowsAzure.CloudConfigurationManager.get_AppSettings() +137
Microsoft.WindowsAzure.CloudConfigurationManager.GetSetting(String name) +27
TankSoft.EverMarket.EverMarketPrereleaseRole.Endpoints.Api.Notify..ctor() +40
lambda_method(Closure , Object[] ) +60
Autofac.Core.Activators.Reflection.ConstructorParameterBinding.Instantiate() +315
Различные потоки упомянули, как мне нужно очистить эту DLL от моей папки bin, но DLL не копируется в первую очередь. Я подозреваю, что это связано с тем, что я запускаю под Azure SDK 2.2, а не 1.x. Я понимаю, что могу напрямую ссылаться на DLL, но я чувствую, что мне не нужно это делать, чтобы развернуть для Azure вполне нормальный проект. Почему Microsoft не автоматически обнаруживает, что мой проект требует этого файла и для этого вернет мне правильный файл? Это безумие.
Позвольте мне также сказать, что проект, который я публикую, не является облачным сервисом, а скорее обычным проектом веб-сайта Azure.
Кому-нибудь удалось запустить Azure SDK 2.x, чтобы решить эту проблему? Каковы были ваши последующие шаги?