Это не ошибка .NET, это ошибка MS C Runtime (CRT, MSCRT).
Ваш сторонний dll предположительно использует какой-то MSCRT dll (существует множество версий).При запуске процесса собственного приложения CRT инициализируется (он содержит точку входа в программу, которая затем вызывает main
).Существует также точка входа для новых потоков, обеспечивающая правильную настройку данных для каждого потока.
Если среда выполнения .NET 2 1 по умолчанию использует тот же MSCRTкак нативный код, тогда он будет правильно инициализирован..NET 4 предположительно использует более новую версию (новые версии MSCRT, как правило, поставляются с новыми версиями VS, как и .NET), тогда более старая версия MSCRT загружается только как зависимость и не используется для запуска приложения.
Большую часть времени MSCT обрабатывает это правильно, но если сторонний dll делает что-то «умное», он может обойти некоторую инициализацию, и это просто работает, если в .NET используется та же версия MSCRT.Примером такого неправильного использования является непосредственный вызов CreateThread
вместо использования оболочки MSCRT _beginthread
.
Для первопричины вам потребуется достаточное понимание 3-й части dll иобертка - более вероятно, что вам нужно предоставить воссоздание третьему лицу для исправления.
1 Помните, что V3.5 просто лишнийсборки поверх 2.0 CLI.