C#运行时编译缺少外部项目引用

时间:2015-01-27 12:35:34

标签: c# compilation runtime

我在VS2013中有一个解决方案,该解决方案有2个项目,projA和projB。

在projA,启动项目中,我编写了一些代码来在运行时编译C#文本文件,并且我的代码实际上在将其链接到运行它的projA中的命名空间时效果很好。

但是当我尝试将它链接到projB中的命名空间时,例如做using namespaceInProjB这样的事情,它说它们不存在。我以为它们也可以在当前域组件中找到?

有谁知道如何包含它们?这是我的代码:

CodeDomProvider provider = new CSharpCodeProvider();
        CompilerParameters compilerParams = new CompilerParameters();

        compilerParams.CompilerOptions = "/target:library";
        compilerParams.GenerateExecutable = false;
        compilerParams.GenerateInMemory = true;
        compilerParams.IncludeDebugInformation = false;

        compilerParams.ReferencedAssemblies.Add("mscorlib.dll");
        var assemblies = AppDomain.CurrentDomain
                        .GetAssemblies()
                        .Where(a => !a.IsDynamic)
                        .Select(a => a.Location);

        foreach (string str in assemblies.ToArray<string>())
            compilerParams.ReferencedAssemblies.Add(str);

        CompilerResults result = provider.CompileAssemblyFromSource(compilerParams, scriptCode);

        // Write out all the errors
        if (result.Errors.Count > 0)
        { 
            errors = result.Errors;
            return null;
        }

        return result.CompiledAssembly;

1 个答案:

答案 0 :(得分:0)

确保您在projB中使用的课程为public,因为默认课程为internal,您不能在projA中的其他项目中使用它们