我有一个CSharpCodeProvider接受一个类的代码。在正在编译代码的项目中,我有一个接口。我希望我正在编译的代码符合该接口。

这是我想出的最简单的例子来说明我的问题。我有一个包含两个文件的项目:

Program.cs:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            //set up the compiler
            CSharpCodeProvider csCompiler = new CSharpCodeProvider();

            CompilerParameters compilerParameters = new CompilerParameters();
            compilerParameters.GenerateInMemory = true;
            compilerParameters.GenerateExecutable = false;

            var definition =
@"class Dog : IDog
{
    public void Bark()
    {
        //woof
    }
}";
            CompilerResults results = csCompiler.CompileAssemblyFromSource(compilerParameters, new string[1] { definition });

            IDog dog = null;
            if (results.Errors.Count == 0)
            {
                Assembly assembly = results.CompiledAssembly;
                dog = assembly.CreateInstance("TwoDimensionalCellularAutomatonDelegate") as IDog;
            }

            if (dog == null)
                dog.Bark();
        }
    }
}


IDog.cs:

namespace ConsoleApplication1
{
    interface IDog
    {
        void Bark();
    }
}


我似乎无法弄清楚如何让CSharpCodeProvider识别IDog。我尝试了compilerParameters.ReferencedAssemblies.Add("ConsoleApplication1");,但没有成功。任何帮助,将不胜感激。

最佳答案

解决方案是引用当前正在执行的程序集。

var location = Assembly.GetExecutingAssembly().Location;
compilerParameters.ReferencedAssemblies.Add(location);

关于c# - CSharpCodeProvider符合接口(interface),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8269094/

10-13 06:49