【问题标题】:How to use a .NET API with IronPython?如何在 IronPython 中使用 .NET API?
【发布时间】:2013-11-29 15:20:09
【问题描述】:

我尝试为 RegioGraph (regiograph.de) 编写一个宏。我对.NET 几乎一无所知。 RegioGraph 有一个帮助文件描述了 API 本身,但是关于如何使用它的信息非常有限。我发现的唯一有用的参考是这个 C# 中的示例:http://www.cgo.se/wordpress/2010/10/14/regiograph-api/

在听取 cmets 的建议后于 2013 年 12 月 11 日更新:

我发现 RegioGraph 程序集是 .NET 2.0,所以我安装了对应的 IronPython-2.6.2-Net20.msi:http://download-codeplex.sec.s-msft.com/Download/Release?ProjectName=ironpython&DownloadId=159513&FileTime=129321579152370000&Build=20841

我想得到一个 Application 对象:

IronPython 2.6.2 (2.6.10920.0) on .NET 2.0.50727.7905
Type "help", "copyright", "credits" or "license" for more information.
>>> import clr
>>> clr.AddReferenceToFileAndPath('C:/Program Files/GfK GeoMarketing/RegioGraph Planung 11/GfK.GeoMarketing.Api.dll')
>>> import GfK.GeoMarketing.Api
>>> app = GfK.GeoMarketing.Api.RegioApplication()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] Die Datei oder Assembly "GfK.GeoMarketing.Api, Version=11.0.0.96, Culture=neutral, PublicKeyToken=49e059cfaef07841" oder eine Abhängigkeit davon wurde nicht gefunden. Das System kann die angegebene Datei nicht finden.

使用 Fusion 协议进行检查表明,仅在全局程序集缓存 (GAC) 和 IronPython 程序文件夹中搜索程序集。所以一种解决方法是将 GfK*.dll 复制到 C:/Program Files/IronPython 2.6/ 中。

当我安装 Visual Studio Express 2013 Desktop 时,我得到了这个简短的 C# 程序:

using GfK.GeoMarketing.Api;

class RGStart
{
    static void Main()
    {
        RegioApplication application = new RegioApplication();
    }
}

我必须遵循这些步骤(尝试翻译德语):

  • 新项目,已安装/templates/Visual C#/Windows/console 应用程序,名称:RGStart
  • 项目、RGStart 属性、应用程序、目标框架 .NET 2.0
  • 项目、RGStart 属性、make/build、目标平台 x86
  • 删除无效引用(在项目地图浏览器中标记)
  • 项目,添加参考,浏览,C:\Program Files\GfK GeoMarketing\RegioGraph Planung 11
    • GfK.GeoMarketing.Api.dll
    • GfK.GeoMarketing.Gui.dll
    • GfK.GeoMarketing.ManagedBackend.dll
  • 替换 C# 代码 (Program.cs)
  • F5,没有更多错误消息,应用程序对象启用对 RegioGraph 的访问

【问题讨论】:

  • 你能把第一条错误信息翻译成英文吗?看起来它无法加载程序集,但我不确定。
  • @JeffHardy:无法加载文件或程序集“GfK.GeoMarketing.Api,Version=11.0.0.96,Culture=neutral,PublicKeyToken=49e059cfaef07841”或其依赖项之一。系统找不到指定的文件。
  • 尝试在所有 GfK.GeoMarketing.* 程序集上调用 clr.AddReference,然后再执行其他任何操作 - 我猜它在加载其中一个时遇到问题,但异常并不清楚原因。否则,您需要考虑启用 Fusion 日志记录并使用 fuslogvw.exe 找出加载问题。
  • @JeffHardy 请原谅我反应迟钝。我通过用 C# 编写插件解决了我当前的 RegioGraph 问题,然后继续执行其他任务。
  • @JeffHardy 当我了解不同的 .NET 框架时,今天我用 .NET 2 替换了旧版本的 IronPython。不确定这是否有必要,因为我得到了与以前相同的结果。然后我设法按照您关于 Fusion Logging 的提示进行操作,该提示显示汇编程序绑定器仅在 GAC 和 IronPython 文件夹中看起来。将 GfK.* 复制到 C:\Program Files\IronPython 2.6 后,我得到一个应用程序对象(与上述相同的命令)。不想将此作为解决方案发布,因为肯定有更好的方法(在 GAC 中安装文件?)。

标签: .net ironpython


【解决方案1】:

先决条件:工具gacutil.exe来自微软的“NETFX 4.5.1 Tools”; fuslogvw.exe 和 ildasm.exe 也可能有用。这些是 Windows SDK 的一部分,我认为它是“Visual Studio Express 2013 for Windows Desktop”安装的一部分。

  1. 将 RegioGraph API 程序集添加到全局程序集缓存 (GAC):

    gacutil /i C:\Program Files\GfK GeoMarketing\RegioGraph Planung 11\GfK.GeoMarketing.Api.dll
    

    至少对于 .Shared、.Interfaces、.ManagedBackend、.LowLevelBackend、.Projections 也是如此。最好将所有 GfK.*.dll 安装到 GAC 中。

  2. 在 IronPython 控制台中使用以下命令:

    import clr
    clr.AddReference('GfK.GeoMarketing.Api')
    import GfK.GeoMarketing.Api
    app = GfK.GeoMarketing.Api.RegioApplication()
    proj = app.OpenProject('path\\to\\.gfk\\file')
    # ... yeah, got it! ...
    

    在 Visual Studio 中使用 C# 进行实验,RegioGraph API 似乎绑定到 .NET 2.0。但是,此指令适用于当前的 IronPython(.NET 4.0 上的 2.7.4)以及古老的 .NET 2.0-IronPython。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-23
    • 2010-12-07
    • 1970-01-01
    • 2010-11-21
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多