【问题标题】:Calling C# code within Python3.6Python3.6内调用C#代码
【发布时间】:2018-06-13 09:40:27
【问题描述】:

完全不了解 C# 编码,我希望在我的 python 代码中调用 C# 函数。我知道围绕同一个问题有很多问答,但出于某种奇怪的原因,我无法从示例 python 模块中导入简单的 c# 类库。

以下是我所做的 -

C# 类库设置

我正在使用 VS 2017 CE。

我在ClassLibrary(.NET Standard)的类型下新建一个项目TestClassLibrary

项目里面的类如下——

MyClass.cs

using System;
namespace TestClassLibrary
{
    public class MyClass
    {
        public string function()
        {
            return "Hello World!";
        }
    }
}

这样构建成功,在\bin\Debug\netstandard2.0目录下生成.dll文件为TestClassLibrary.dll

现在,我切换到 python3.6(在 virtualenv 上运行,由 pythonnet 2.3.0 支持)

ma​​in.py

import sys
sys.path.append(r"<Ablsloute Path to \bin>\Debug\netstandard2.0")
import clr
clr.AddReference(r"TestClassLibrary")
from TestClassLibrary import MyClass

当我运行python main.py 时,代码失败并出现错误 -

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    from TestClassLibrary import MyClass
ModuleNotFoundError: No module named 'TestClassLibrary'

代码应该是 -

import sys
sys.path.append(r"C:\Users\DELL\source\repos\TestClassLibrary\TestClassLibrary\bin\Debug\netstandard2.0")
import clr
clr.AddReference("TestClassLibrary.dll")
from TestClassLibrary import MyClass

我明白了——

clr.AddReference("TestClassLibrary.dll")
System.IO.FileNotFoundException: Unable to find assembly 'TestClassLibrary.dll'.
   at Python.Runtime.CLRModule.AddReference(String name)

但是当我运行下面的代码时,代码按预期运行 -

import clr
clr.AddReference(r"System.Windows.Forms")
from System.Windows.Forms import MessageBox
MessageBox.Show("Hello World!")

我不知道我可能会错过什么:(

【问题讨论】:

  • 您正在使用 .NET Core 程序集,但 pythonnet 目前仅部分支持 .NET Core。将您的 C# 代码编译为 .NET Framework 4.0+。
  • 发现@denfromufa :) 非常感谢 :)

标签: c# python .net python.net pythonnet


【解决方案1】:

这真的很笨拙,但我喜欢做一些个人项目的事情。 Python 让您可以非常轻松地将内容发送到命令行。 C# 可以从命令行运行。你可能知道我要做什么了。

尝试将升 C 添加到 PATH。将操作系统导入 python。然后在你想运行 C# 脚本时使用这行代码:

os.system("csc nameofscript.cs")

也许我误解了,但这就是我如何让它在我的机器上工作

【讨论】:

    猜你喜欢
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多