C#动态编译和“Microsoft.CSharp.dll”错误

时间:2012-07-10 15:45:52

标签: c# dynamic ironpython .net-assembly

我正在做可以找到here的例子。 所以我试图在C#脚本中运行IronPython:

的Python:

def hello(name):
    print "Hello " + name + "! Welcome to IronPython!"
    return

def add(x, y):
    print "%i + %i = %i" % (x, y, (x + y))
    return

def multiply(x, y):
    print "%i * %i = %i" % (x, y, (x * y))
    return

C#:

using IronPython.Hosting;
using IronPython.Runtime;
using Microsoft.Scripting.Hosting;
using System;

namespace IntroIronPython
{
    class IronPythonMain
    {
        static void Main(string[] args)
        {
            // Create a new ScriptRuntime for IronPython
            Console.WriteLine("Loading IronPython Runtime...");
            ScriptRuntime python = Python.CreateRuntime();

            try
            {
                // Attempt to load the python file
                Console.WriteLine("Loading Python File...");
                // Create a Dynamic Type for our Python File
                dynamic pyfile = python.UseFile("PythonFunctions.py");
                Console.WriteLine("Python File Loaded!");

                Console.WriteLine("Running Python Commands...\n");

                // Call the hello(name) function
                pyfile.hello("Urda");
                …

从这里我有这个错误: “如果没有”Microsoft.CSharp.dll“程序集引用,则无法编译动态操作。” 我真的不明白那是什么,我忘了添加什么?

在我的参考资料中,我有: References of my project

感谢您的帮助。

Ps:我在MonoDevelop上。

3 个答案:

答案 0 :(得分:12)

这对我有所帮助。我正在使用Xamarian Studio v5.8.1(build 8)编写C#程序。我只需要右键点击"参考文献" - > "编辑参考文献" - >开始打字"微软"在搜索栏中 - >选中" Microsoft.CSharp"旁边的复选框。 - >并单击"确定"。

我刚刚保存并运行程序 - 一切都按预期工作!

答案 1 :(得分:4)

确定。基本上,我的错误与我从错误的平台添加我的IronPython程序集这一事实有关。 验证:

  • 目标框架:4.0

  • 在[IronPython-2.7.3]中添加IronPython提供的所有程序集 - > [平台] - > [Net40]。

向所有给我建议的人致谢。

Ps:当然,现在还有另一个问题......但不再是那个话题了。

答案 2 :(得分:2)

Microsoft.CSharp.dll包含C#编译器的动态部分。只要在代码中使用dynamic,就需要引用它。我不熟悉MonoDevelop,但您可能必须将目标框架设置为4.0,并向项目添加对Microsoft.CSharp.dll的引用(可能右键单击项目,'添加引用',查找Microsoft.CSharp)。

我的猜测是您正在使用的项目是使用VS的预发布版本创建的,并且缺少正确的引用。