ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

嵌入式和安装IronPython-dll版本混乱

2019-11-22 09:05:51  阅读:338  来源: 互联网

标签:dll ironpython c net


我有嵌入了IronPython的应用程序,并使用它来执行用户编写的脚本.当仅安装我的应用程序时,一切正常.我已嵌入IronPython 2.7.4 dll(安装后我的exe和IronPython dll位于同一文件夹中).

但是,在某些客户端计算机上,安装了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程序集,而不使用在GAC中注册的2.7.2.1001?为什么.NET会忽略版本号的第三部分,并且可以对其进行更改?

编辑:

如果很重要,请安装IronPython 2.7.2,我的程序将失败,并显示以下错误:

Unhandled Exception: System.MissingMethodException: Method not found: ‘Boolean IronPython.Hosting.PythonConsoleOptions.get_BasicConsole()’.

解决方法:

问题是,IronPython 2.7.2和IronPython 2.7.4都具有相同的程序集版本号,正如您所报告的那样,该版本号是2.7.0.40.

因此,鉴于此,您的问题显然是,GAC中存在IronPython.dll程序集的一个版本,而本地版本具有相同的版本号.根据that answer,无法加载本地版本而不是GAC版本.

在这种情况下,我可以想到两种可能性:

>使用新版本号重新编译(或后处理并重新签名)IronPython.dll程序集,并使用程序集重定向,以便将对常规IronPython.dll程序集的请求重定向到您的本地程序集;
>启动应用程序时,请检查IronPython版本,如果检测到不合适的IronPython版本,请要求使用者将其安装更新为IronPython 2.7.4.例如.:

string ironPythonFileVersion = ((AssemblyFileVersionAttribute)typeof(IronPython).Assembly.GetCustomAttributes(typeof(AssemblyFileVersionAttribute), false)[0]).Version;
if (ironPythonFileVersion == "2.7.2.1001") {
    // IronPython 2.7.2 was loaded. Deal as appropriate.
}

标签:dll,ironpython,c,net
来源: https://codeday.me/bug/20191122/2058752.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有