相关疑难解决方法(0)

如何从C#运行Python脚本?

之前已经在不同程度上提出了这类问题,但我觉得它没有以简洁的方式回答,所以我再次提出这个问题.

我想用Python运行一个脚本.让我们说是这样的:

if __name__ == '__main__':
    with open(sys.argv[1], 'r') as f:
        s = f.read()
    print s
Run Code Online (Sandbox Code Playgroud)

获取文件位置,读取它,然后打印其内容.没那么复杂.

好的,那我怎么在C#中运行呢?

这就是我现在拥有的:

    private void run_cmd(string cmd, string args)
    {
        ProcessStartInfo start = new ProcessStartInfo();
        start.FileName = cmd;
        start.Arguments = args;
        start.UseShellExecute = false;
        start.RedirectStandardOutput = true;
        using (Process process = Process.Start(start))
        {
            using (StreamReader reader = process.StandardOutput)
            {
                string result = reader.ReadToEnd();
                Console.Write(result);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

当我通过code.py位置cmdfilename位置,因为args它不起作用.有人告诉我,我应该通过python.execmd,然后code.py filename作为args …

.net c# python ironpython python.net

111
推荐指数
6
解决办法
21万
查看次数

.NET中是否有字符串数学计算器?

如果我有一个带有有效数学表达式的字符串,例如:

String s = "1 + 2 * 7";
Run Code Online (Sandbox Code Playgroud)

在.NET中是否有内置的库/函数来解析和评估该表达式并返回结果?在这种情况下15.

.net c#

81
推荐指数
9
解决办法
6万
查看次数

以原生速度运行动态编译的C#代码......怎么样?

我已经阅读了几篇关于编写和编译动态C#代码的帖子.例如,这篇文章.我知道它可以通过几种方式完成.

但是,调用代码调用程序很慢.我做了一个简单的基准测试,它比调用本机方法慢了约500倍.

我希望能够做的是等同于加载DLL并直接调用其中一个方法("本机"),这将提供我想要的速度优势.

最简单的方法是什么?将动态代码编译为dll然后加载它?可以在记忆中完成吗?

编辑

我不关心编译时间.只执行.

编辑2,3

这是我写的基准代码:

    public static int Execute(int i) { return i * 2; }

    private void button30_Click(object sender, EventArgs e)
    {
        CSharpCodeProvider foo = new CSharpCodeProvider();

        var res = foo.CompileAssemblyFromSource(
            new System.CodeDom.Compiler.CompilerParameters()
            {
                GenerateInMemory = true,
                CompilerOptions = @"/optimize",                    
            },
            @"public class FooClass { public static int Execute(int i) { return i * 2; }}"
        );

        var type = res.CompiledAssembly.GetType("FooClass");
        var obj = Activator.CreateInstance(type);
        var method = type.GetMethod("Execute");
        int i = 0, t1 …
Run Code Online (Sandbox Code Playgroud)

c# compiler-construction assemblies dynamic

9
推荐指数
1
解决办法
4433
查看次数

C#作为脚本语言

可能重复:
从非托管代码调用托管.NET代码的最佳方法

我很想知道我是否可以使用C#作为c ++本机应用程序中托管的脚本语言.我已经在自己的游戏引擎上工作了5年,但我从来没有触及它的脚本方面.我喜欢在Unity中如何为游戏中的不同对象编写C#脚本.

我做了一些搜索,但我找不到任何实际用途.

请注意,我的问题与.Net无关,而与C#作为通用语言有关.

为了确保,我将说明:我不想从C#调用本机c ++.我反过来想要它.

如果有人能指出我的一些资源,我会很感激.

c# c++ native unity-game-engine

7
推荐指数
1
解决办法
5192
查看次数

使用DLR运行用CompileAssemblyFromSource生成的代码?

继续这个优秀的答案,我想知道使用dynamic关键字的DLR是否允许更简洁的方式为生成的程序集编写代码.

例如,上述答案的代码可以:

using (Microsoft.CSharp.CSharpCodeProvider foo = 
           new Microsoft.CSharp.CSharpCodeProvider())
{
    var res = foo.CompileAssemblyFromSource(
        new System.CodeDom.Compiler.CompilerParameters() {  
            GenerateInMemory = true 
        }, 
        "public class FooClass { public string Execute() { return \"output!\";}}"
    );

    var type = res.CompiledAssembly.GetType("FooClass");
    var obj = Activator.CreateInstance(type);
    var output = type.GetMethod("Execute").Invoke(obj, new object[] { });
}
Run Code Online (Sandbox Code Playgroud)

变成这样的东西:

using (Microsoft.CSharp.CSharpCodeProvider foo = 
           new Microsoft.CSharp.CSharpCodeProvider())
{
    var res = foo.CompileAssemblyFromSource(
        new System.CodeDom.Compiler.CompilerParameters() {  
            GenerateInMemory = true 
        }, 
        "public class FooClass { public string Execute() { return …
Run Code Online (Sandbox Code Playgroud)

.net c# codedom dynamic-language-runtime

5
推荐指数
1
解决办法
1802
查看次数

如何在运行时动态创建C#类(根据现有类)

背景:

我们有一个客户端(Javascript)和服务器端(C#)的项目.需要在两侧运行计算逻辑,因此它用Javascript和C#编写.我们为C#版本类进行了许多单元测试.我们的目标是分享C#和Javascript实现的单元测试.

现在的情况:

我们能够在嵌入式JS引擎(Microsoft ClearScript)中运行Javascript代码.代码如下所示:

public decimal Calulate(decimal x, decimal y) 
{
     string script = @"
            var calc = new Com.Example.FormCalculater();
            var result = calc.Calculate({0}, {1});";

     this.ScriptEngine.Evaluate(string.Format(script, x, y));

     var result = this.ScriptEngine.Evaluate("result");
     return Convert.ToDecimal(result);
}
Run Code Online (Sandbox Code Playgroud)

但是,编写这样的类需要付出很多努力.我们正在寻找一种在运行时动态创建这些类的方法.

例如,我们有一个C#类(在JS文件中也有JS版本):

public class Calculator {
    public decimal Add(decimal x, decimal y){ ... }
    public decimal Substract(decimal x, decimal y){ ... }
    public decimal Multiply(decimal x, decimal y){ ... }
    public decimal Divide(decimal x, decimal y){ ... }
}
Run Code Online (Sandbox Code Playgroud)

我们想要创建一个具有相同方法的动态类,但调用脚本引擎来调用相关的JS代码.

有可能吗?

javascript c# emit clearscript

5
推荐指数
1
解决办法
622
查看次数