我有一个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/