Недавно у меня была ошибка, которая проявлялась только тогда, когда библиотека была построена как сборка релиза, а не как отладочная сборка. Библиотека представляет собой .NET dll с оболочкой COM, и я использую CoCreateInstance для создания класса из dll в неуправляемом приложении c ++. Когда я наконец обнаружил ошибку, она была вызвана доступом к одноэлементному объекту. У меня был экземпляр singleton, объявленный так:
private static readonly MyObjectType s_instance = new MyObjectType;
и затем получил к нему доступ:
public static MyObjectType Instance
{
get
{
return s_instance;
}
}
это не удалось. Меняя его на:
private static MyObjectType s_instance;
public static MyObjectType Instance
{
get
{
if (s_instance==null)
{
s_instance = new MyObjectType();
}
return s_instance;
}
}
исправил проблему. Есть идеи, почему первоначальное использование не сработало и есть ли недостатки в том или ином случае?
Похоже, что dll-релиз идеально подходит для другого управляемого приложения.