Разница в поведении компонентов.NET при изменении конфигурации компиляции

У меня проблемы с куском кода, который ведет себя по-разному в зависимости от того, был ли он скомпилирован в конфигурации Release или Debug в Visual Studio. Я вручную изменил все параметры компиляции проекта, которые я вижу в конфигурации выпуска, чтобы она соответствовала настройке отладки, но проблема сохраняется.

Код (ниже) возвращает Guid исполняемой сборки:

private static Guid GetApplicationUid() 
{ 
   Assembly assembly = Assembly.GetCallingAssembly(); 
   GuidAttribute attribute = (GuidAttribute)assembly.GetCustomAttributes(typeof(GuidAttribute), false)[0]; 
   return new Guid(attribute.Value); 
}

Метод завершается с ошибкой "Индекс был за пределами массива". исключение при выполнении после компиляции в режиме Release. Он работает правильно в режиме отладки. Причина в том, что в этой конфигурации ссылка на сборку, созданная GetExecutingAssembly(), относится к временной сборке (например, App_Web_eelfd0ff, Version=0.0.0.0, Culture= нейтральный, PublicKeyToken=null), а не к базовой "реальной".

Как ни странно, у меня есть другой компонент, работающий в той же сети, который использует тот же код и ведет себя одинаково независимо от режима компиляции.

Почему это происходит и как это предотвратить?

2 ответа

Решение

Возможно, что когда оптимизация включена, функция встроена в другую сборку. Попробуйте добавить MethodImplOptions.NoInlining, согласно этому ответу, так что метод находится в сборке, вы думаете, что это так.

Исключение означает, что сборка не имеет атрибута GUID. Предполагается, что он может быть оптимизирован компилятором в режиме выпуска, если сборка не настроена на видимость COM1. Проверьте другую рабочую сборку, чтобы узнать , зарегистрирована ли она для COM-взаимодействия.

1 GUID используются только в сборках.NET для взаимодействия COM. Visual Studio автоматически добавляет GUID для вас при создании нового проекта на случай, если вы хотите сделать COM-взаимодействие, но в противном случае это бесполезно.

Другие вопросы по тегам