在Python3.6中调用C#代码

时间:2018-01-03 17:12:54

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

绝对不知道C#中的编码,我希望在我的python代码中调用一个C#函数。我知道有相当多的Q& As围绕同样的问题,但由于一些奇怪的原因,我无法从示例python模块导入一个简单的c#类库。

以下是我做过的事情 -

  

C#类库设置

我正在使用VS 2017 CE。

我在TestClassLibrary

类型下创建了一个新项目ClassLibrary(.NET Standard)

项目内的课程如下 -

MyClass.cs

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

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

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

main.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!")

我不知道自己可能缺少什么:(

1 个答案:

答案 0 :(得分:0)

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

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

os.system("csc nameofscript.cs")

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