У меня есть приложение со встроенным IronPython, которое использует его для выполнения сценариев, которые пишут пользователи. Когда установлено только мое приложение, все работает как положено. Я встроил библиотеки DLL IronPython 2.7.4 (мои DLL exe и IronPython находятся в одной папке после установки).
Однако на некоторых клиентских машинах установлен IronPython 2.7.2. Он устанавливает свои dll в GAC, и мое приложение в конечном итоге использует их вместо dll, которые я поставлял с приложением и приложением. Это приводит к сбою моего приложения, поскольку я использую свойство, недоступное в 2.7.2.
Проблема в том, что .NET по какой-то причине видит эти сборки как имеющие одну и ту же версию (2.7.0.40). Как видно на изображении ниже, версии файлов разные:
Правый - это тот, который я поставляю с моим приложением, а левый - тот, который поставляется с IronPython 2.7.2. Я ничего не регистрирую в GAC, но это то, что зарегистрировано в GAC (установка IronPython добавила это):
C:\ $ gacutil /l | findstr IronPython
IronPython, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL
IronPython.Modules, Version=2.7.0.40, Culture=neutral, PublicKeyToken=7f709c5b713576e1, processorArchitecture=MSIL
Как видите, они зарегистрированы для версии 2.7.0.40.
У меня вопрос: как заставить мое приложение использовать версию 2.7.4.1000 сборок IronPython, а не 2.7.2.1001, зарегистрированную в GAC? Почему .NET игнорирует третий компонент номера версии и можно ли его изменить?
Изменить:
Если это важно, с установленным IronPython 2.7.2 моя программа не работает со следующей ошибкой:
Необработанное исключение: System.MissingMethodException: метод не найден: 'Boolean IronPython.Hosting.PythonConsoleOptions.get_BasicConsole ()'.