Это довольно просто действительно. Я знаю, что этому ответили, но я попробую еще раз, но попытаюсь сохранить его максимально простым.
деструктор А никогда не должен обычно использоваться. Это только выполняется, .net хочет, чтобы он работал. Это будет только бежать за мусором collectoin цикл. Это никогда не может на самом деле выполняться в течение жизненного цикла Вашего приложения. Поэтому Вы никогда не должны помещать код в деструктор, который 'должен' быть выполнен. Вы также не можете полагаться ни на какие существующие объекты в классе для существования, когда он работает (они, возможно, были уже очищены как порядок, в которых деструкторах, выполненных в, не гарантирован).
IDisposible должен использоваться каждый раз, когда у Вас есть объект, который создает ресурсы, которым нужна чистка (т.е., файл и графические дескрипторы). На самом деле многие утверждают, что что-либо, Вы вставляете деструктор, должно быть putin IDisposable из-за упомянутых выше причин.
Большинство классов будет звонить, располагают, когда финализатор выполняется, но это просто там как безопасность и никогда не должно полагаться. Необходимо явно расположить что-либо, что реализует IDisposable, когда Вы сделаны с ним. При реализации IDisposable необходимо звонить, располагают в финализаторе. См. http://msdn.microsoft.com/en-us/library/system.idisposable.aspx для примера.
Вы должны проверить PE-заголовок этих файлов. Все DLL и исполняемые файлы, Win32 и .NET, имеют заголовок PE.
Углубленное изучение формата переносимого исполняемого файла Win32
Я не вижу лучшего способа сделать это. Однако, на 2., на самом деле, ответ отрицательный. Хосты среды выполнения почти наверняка также будут зависеть от mscoree.dll, и это не обязательно сборки .Net.
.Net dll имеют дескриптор COM, который можно найти с помощью dumpbin. Я не знаю, как получить эту информацию из кода.
Если вы программируете в .Net, один из способов определить, является ли сборка сборкой .Net, - это попытаться вызвать Assembly.LoadFrom (...).
Ну, это не настоящий ответ, а набор советов, на которые я бы хотел обратить внимание.
DllRegisterServer не требуется, единственный требуемый экспорт для COM dll - DllGetClassObject