被调用的程序集
namespace TestClass
{
public class Class1
{
public string ReturnStr(string para)
{
return $"Hello Class1 ReturnStr {para}";
}
public static string ReturnStrStatic(string para)
{
return $"Hello Class1 ReturnStrStatic {para}";
}
}
}
namespace TestClass
{
public static class Class2
{
public static string ReturnStrStatic(string para)
{
return $"Hello Class2 ReturnStrStatic {para}";
}
}
}
调用方
IronPython:2.7.9.0
Microsoft.Dynamic:1.3.0.0
Microsoft.Scripting:1.3.0.0
using IronPython.Hosting;
using System;
using System.IO;
using System.Text;
namespace PyrhonInvoke
{
class Program
{
static void Main(string[] args)
{
var pythonEngine = Python.CreateEngine();
string BinPath = AppDomain.CurrentDomain.BaseDirectory;
DirectoryInfo path = new DirectoryInfo(BinPath);
var pythonFile = System.IO.Path.Combine(path.Parent.Parent.FullName, "Data", "PythonScript.py");
var pythonStr = File.ReadAllText(pythonFile, Encoding.UTF8);
var assemblyPath = System.IO.Path.Combine(path.Parent.Parent.FullName, "Package");
assemblyPath = assemblyPath.Replace(@"\", @"\\");
pythonStr = pythonStr.Replace("{BinRoute}", assemblyPath);
var script = pythonEngine.CreateScriptSourceFromString(pythonStr);
var code = script.Compile();
var scope = pythonEngine.CreateScope();
code.Execute(scope);
//静态类调用
var _func = scope.GetVariable("PythonFun");
var data = _func("this is in para");
//非静态类,函数
_func = scope.GetVariable("PythonFun1");
data = _func("this is in para");
//非静态类,静态函数
_func = scope.GetVariable("PythonFun2");
data = _func("this is in para");
}
}
}
Python文件
# -*- coding:UTF-8 -*-
import clr
import sys
sys.path.Add('{BinRoute}')
clr.AddReference('TestClassAssembly.dll')
#TestClass:命名空间
from TestClass import *
def PythonFun(para):
global null
null = ''
#Class2:静态类名称,NoReturnStatic:静态函数名称,para:参数
return Class2.ReturnStrStatic(para)
def PythonFun1(para):
global null
null = ''
#Class1:类名称,NoReturnStatic:函数名称,para:参数
class1 = Class1()
return class1.ReturnStr(para)
def PythonFun2(para):
global null
null = ''
#Class1:类名称,NoReturnStatic:静态函数名称,para:参数
return Class1.ReturnStrStatic(para)