Является ли npython.exe единственным вариантом для запуска скрипта Python, который импортирует .net dll с Python.net - PullRequest
0 голосов
/ 06 октября 2018

Моя кодовая база находится преимущественно в .net framework.Я пытаюсь сделать одну из библиотек доступной в скрипте python через python.net.Я могу заставить его работать успешно,

  1. Скачивая исходный код python.net, а затем собирая npython.exe / python.runtime.dll из исходного кода
  2. Запустите pythonскрипт вроде этого npython.exe MyPythonScript.py

Все работает как положено.

Однако, если я не использую мою версию npython, но использую pip, чтобы установить пакет pythonnet непосредственно в мой python anaconda, а затем попытаться запустить скрипт как C:\Anaconda3\python MyPythonScript.py, я получаю ошибки, такие как

The deserializer cannot load the type to deserialize because type 'System.Collections.Generic.List`1[[RefData.LookUpDataItem, RefData, Version=1.0.6841.27933, Culture=neutral, PublicKeyToken=null]]' could not be found in assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'. Check that the type being serialized has the same contract as the type being deserialized and the same assembly is used.
   at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserializeInSharedTypeMode(XmlReaderDelegator xmlReader, Int32 declaredTypeID, Type declaredType, String name, String ns)
   at System.Runtime.Serialization.XmlObjectSerializerReadContextComplex.InternalDeserialize(XmlReaderDelegator xmlReader, Type declaredType, String name, String ns)
   at System.Runtime.Serialization.NetDataContractSerializer.InternalReadObject(XmlReaderDelegator xmlReader, Boolean verifyObjectName)
   at System.Runtime.Serialization.XmlObjectSerializer.ReadObjectHandleExceptions(XmlReaderDelegator reader, Boolean verifyObjectName, DataContractResolver dataContractResolver)
   at Microsoft.ApplicationServer.Caching.Utility.Deserialize(Byte[][] buffers, Boolean checkTypeToLoad, Object context, IEnumerable`1 knownTypes)
   at Microsoft.ApplicationServer.Caching.RoutingClient.SendMsgAndWait(RequestBody reqMsg, IRequestTracker& tracker)
   at Microsoft.ApplicationServer.Caching.DataCache.SendReceive(RequestBody reqMsg, IMonitoringListener listener)
   at Microsoft.ApplicationServer.Caching.DataCache.InternalGet(String key, DataCacheItemVersion& version, String region, IMonitoringListener listener)
   at Microsoft.ApplicationServer.Caching.DataCache.<>c__DisplayClass49.<Get>b__48()

Программа извлекает некоторые данные с сервера кэширования Microsoft AppFabric.Кэширующие dll находятся в том же месте.Нет изменений в моей библиотеке dll или скрипте python, использующем их.Просто разные призывы.

Такое же поведение наблюдается как в установке Ananconda python 3.6, так и в автономной установке python 2.7.Это вообще невозможно - или есть что-то специфическое для кэширования и сериализации, которое вызывает проблемы?Любая помощь здесь будет высоко ценится.

...