IronPython从C#dll进入内部类

马达加迪

我正在使用IronPython从C#dll中获取内部类。例如:

namespace Platform.CardHost {
    internal class ExtensionManager : IExtensionManager, IDisposable {
    //... other code

IronPython代码

import clr
clr.AddReference('Platform.CardHost')
import Platform.CardHost.ExtensionManager
# raise ImportError: No module named ExtensionManager
# if it add to ref
clr.AddReference('Platform.CardHost.ExtensionManager')
# raise Error
# IOError: System.IO.IOException: Could not add reference to assembly
# Platform.CardHost.ExtensionManager

如何导入ExtensionManager还是不可能?

马蒂亚斯·伯格(Matthias Burger)

所以就像我已经写过的那样:

ExtensionManager,如果你想从别人比你的装配地方访问它公开。的定义internal

可以通过同一程序集中的任何代码访问类型或成员,但不能从另一个程序集中访问该类型或成员。

您可以做的是,使其仅对另一个程序集可用,而对朋友程序集可见:

using System.Runtime.CompilerServices;
using System;

[assembly:InternalsVisibleTo("my_friend_assembly")]
internal class ExtensionManager : IExtensionManager, IDisposable 
{
}

否则,我看不出为什么将其内部化,而是尝试从另一个程序集/您的ironpython-script中访问它。是的,对于朋友聚会来说,肯定有原因。

对于您的新更新:“我无法更改课程”:

所以也许,编写该类的人不想让您从其他地方导入该类?这是使用internalprotectedprivatepublic

恕我直言,在C#中将类定义为确实很不好internal,因此您不能从C#导入它,但是IronPython仍然允许您导入它。

当然,您可以尝试从程序集中获取代码,对其进行更改,然后再次将其重新编写为新的程序集,就像您编写的那样。但是,这需要大量工作,最终可能无法正常工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章