Я развернул свой профилировщик инструментария .NET в веб-приложениях Azure с помощью Visual Studio 2012. Мой профилировщик выполняет инструментирование байтового кода, как показано ниже:
FunctionA()
{
--> Injected C# function Call
functionA's body
-->Injected C# function Call
}
Внедренный вызов функции находится в отдельной сборке dll. В физическом ящике сборка будет добавлена в GAC. Но в Azure он будет находиться в папке в расположении веб-приложения, которое будет проверено в файле web.config.
Используя DefineAssemblyRef из IMetaDataAssemblyEmit, я определяю сборку и ее функцию в каждом модуле, загружаемом в процесс. Введенный вызов функции проблема работает только для функций модулей веб-приложения ..! Другие модули, такие как System.Web.dll или System.Data.dll, не могут вызвать функцию, из-за чего веб-приложение Azure не загружается с ошибкой 502.
Вскоре внедрение в модули, отличные от веб-приложения, терпит неудачу. Я предполагаю, что это проблема безопасности при загрузке пользовательской сборки, и я попытался установить [assembly: System.Security.AllowPartiallyTrustedCallers] и PermissionSetAttribute(SecurityAction.Demand, Name = "FullTrust")], а также некоторые другие атрибуты безопасности .. ничего не помогло .. Как заставить эту вспомогательную сборку загружаться модулями .Net.? Есть ли какие-либо другие специфические атрибуты безопасности, которые мне нужно установить для сборки, чтобы она загружалась ..?
Разве вы не сталкиваетесь с той же проблемой локально при инструментировании процесса IIS? Я подозреваю, что вспомогательная сборка изначально не находится на пути проверки, пока загружаются системные сборки, но она попадает туда, когда IIS полностью загружает ваш веб-сайт и читает ваш web.config.


Я недостаточно знаю о лазурном, но вы можете получить подсказку, если сможете включить FusionLog (или его эквивалент в лазурном). Вы также можете попробовать использовать событие AppDomain.AssemblyResolve, чтобы вручную загрузить сборку. Я недостаточно знаю об Azure, но могу представить, что он может творить чудеса препроцессора nGen.