在运行时编译独立的C#文件,该文件引用另一个文件

时间:2013-07-02 13:25:52

标签: c# compilation codedom

使用this link中的代码我试图在运行时编译生成的.cs文件。该文件(称为Gen.cs)由CodeDOM生成,并且是另一个文件的子类(称为Base.cs)。我从运行时编译中收到以下错误消息:

  

找不到类型或命名空间名称“Base”。您是否缺少using指令或程序集引用?

我知道这个错误意味着它在编译时无法找到Base.cs。我是C#的新手并动态编译C#文件,所以这有点难以分开。 Base和Gen都不使用命名空间,并且两个.cs文件都在同一目录中。有什么我想念的吗?为什么Gen.cs看不到Base.cs?

编辑 - 这可能相关也可能不相关,但这是通过gmcs手动编译的结果(我在MacOS上)

  

mtrc $ gmcs -lib:Base.cs Gen.cs   Gen.cs(13,27):错误CS0246:类型或命名空间名称   找不到“基地”。你错过了使用吗?   指令或汇编参考?

1 个答案:

答案 0 :(得分:1)

通常,编译器只会编译一次通过编译的源文件。 ie:在命令行中指定所有.cs名称,或指定编译给定文件夹中的所有.cs文件。

在这种情况下:

string []arrCode = { code, "base.cs" };
CompilerResults results = 
   compiler.CompileAssemblyFromSource(compilerparams, arrCode);    

替代语法:

CompilerResults results = 
   compiler.CompileAssemblyFromSource(compilerparams, code, "base.cs");