Это стандартная проблема DLL Hell, вызванная использованием опции/codepage для Regasm.exe. Или, чаще всего, на вкладке «Проект»> «Свойства»> «Создать»> «Регистрация для COM-взаимодействия». Оба делают то же самое, они пишут путь к DLL в реестр. Это очень хороший вариант использования, когда вы заняты разработкой и тестированием проекта, избегая необходимости перерегистрировать DLL в GAC каждый раз, когда вы вносите изменения.
Но то, что он делает не Это помогает CLR найти любые зависимости. Обычные правила зондирования остаются в силе, он ищет файл appname.exe.config в каталоге, где хранится EXE. И сначала смотрит в GAC, следующий в пути EXE для зависимостей. Конфигурация остается под контролем обычной жертвы DLL Hell, кто должен поддерживать EXE. Часто конечный пользователь. Таким образом, явно, не смотрите в каталоге, где хранится ваша библиотека [ComVisible].
Это мягкий вид DLL Hell, просто обычная ошибка, не найденная в файлах. Гораздо мягче, чем неприятный вид, находя файл с правильным именем, но с неправильной версией. В целом сильная проблема с Newtonsoft.Json.dll, есть около 35 версий в дикой природе. Имея так много версий, и эта популярная библиотека порождает другую гадость, программа использует другой COM-сервер, который также использует DLL. Но почти неизбежно другая версия. Как правило, это происходит после того, как вы объявили о завершении проекта. Один из них собирается проиграть, 50-50 шансов, что это вы. 100% шансы для конечного пользователя.
Да, GAC решает эту проблему. Каждая библиотека получает версию, которую они просят. В идеале Newtonsoft решит эту проблему для вас с помощью установщика, который развертывает DLL в GAC. Но это не та приверженность, которую разработчики библиотек с открытым исходным кодом когда-либо хотят предоставить. Они хотят (и нуждаются), чтобы сделать это вашей проблемой. Microsoft делает это, но у них также есть Центр обновления Windows, чтобы обеспечить развертывание критических ошибок и исправлений безопасности. И у большого количества людей, работающих над тем, чтобы все новые версии всегда были обратно совместимы с оригинальной версией, поэтому номер версии не должен меняться.
Обратите внимание, что вы можете использовать. Вы также можете использовать классы DataContractJsonSerializer и JavascriptSerializer для выполнения этой задачи. Часть структуры, они редко ошибаются.
Между тем, помните, что просто проблема с файлом.Вам не нужно использовать GAC на вашей машине для разработчиков, и это лучше, если вы этого не сделаете, так же легко скопировать файл в нужное место, чтобы поддерживать CLR. Это тот же каталог, что и ваша тестовая программа VB6. И, добавьте причуду с VB6, в C: \ Program Files (x86) \ Visual Studio \ VB6, если вы хотите использовать отладчик VB6. Используйте GAC при развертывании.
Так что это не Json.Net, что вы зарегистрировались в COM, а еще одна сборка .Net, использующая Json.Net? – Liam
Является ли эта ошибка при использовании вашей сборщике C#? Возможно, вы захотите использовать что-то вроде Process Monitor, чтобы точно наблюдать, где находится ваше приложение, когда оно пытается найти файл Newtonsoft.Json.dll. –
@Liam Да. DLL COM-взаимодействия с использованием стандартной сборки Newtonsoft.Json. –