读书人

求解关于C#引用类的,该如何解决

发布时间: 2012-05-07 12:40:40 作者: rapoo

求解,关于C#引用类的
代码:
文件1:

C# code
    class Class2    {        public Class2()        {            Console.WriteLine("class2");        }    }


文件2://用的是动态编译,代码可以不看,只看 红色字体的部分

C# code
       static void Main(string[] args)        {            CSharpCodeProvider codeProvide = new CSharpCodeProvider();            ICodeCompiler codeCompiler = codeProvide.CreateCompiler();            CompilerParameters compilerParameters = new CompilerParameters();            compilerParameters.ReferencedAssemblies.Add("System.dll");            compilerParameters.ReferencedAssemblies.Add("System.Core.dll");            compilerParameters.GenerateExecutable = false;            compilerParameters.GenerateInMemory = true;            CompilerResults cr = codeCompiler.CompileAssemblyFromSource(compilerParameters, GenerateCode());            if (cr.Errors.HasErrors)            {                Console.WriteLine("编译错误:");                foreach (CompilerError err in cr.Errors)                {                    Console.WriteLine(err.ErrorText);                }            }            else            {                Assembly assembly = cr.CompiledAssembly;                object helloword = assembly.CreateInstance("PINQ_test_ConsoleApplication.HelloWorld");                MethodInfo methodInfo = helloword.GetType().GetMethod("OutPut");                object[] objs = new object[1];                objs[0] = "fuckYou";                char[] cc = (char[])methodInfo.Invoke(helloword, objs);                Console.WriteLine(cc[0].ToString());                Console.WriteLine(new String(cc));            }            Console.ReadLine();        }               static string GenerateCode()        {            StringBuilder sb = new StringBuilder();            sb.Append("using System;using System.Linq;");            sb.Append(Environment.NewLine);            sb.Append("namespace PINQ_test_ConsoleApplication");            sb.Append(Environment.NewLine);            sb.Append("{");            sb.Append(Environment.NewLine);            sb.Append("      public class HelloWorld");            sb.Append(Environment.NewLine);            sb.Append("      {");            sb.Append(Environment.NewLine);            sb.Append("          public char[] OutPut(string str)");            sb.Append(Environment.NewLine);            sb.Append("          {");            sb.Append(Environment.NewLine); [color=#FF0000]           sb.Append("Class2 cc=new Class2();               return str.ToArray();");[/color]            sb.Append(Environment.NewLine);            sb.Append("          }");            sb.Append(Environment.NewLine);            sb.Append("      }");            sb.Append(Environment.NewLine);            sb.Append("}");            string code = sb.ToString();            //Console.WriteLine(code);            //Console.WriteLine();            return code;        }


这个时候显示的是错误的,因为这是两个文件,虽然我定义了同一个命名空间,但是,系统好像并不把他们当做一个命名空间处理,

请问,应该如何解决?

[解决办法]
错误提示是什么?你加上完全的命名空间限定名看看,比如

XXXX.Class2 cc=new XXXX.Class2();

看看还有没有错,
[解决办法]
compilerParameters.ReferencedAssemblies.Add("System.dll");

你没加DLL的引用,把引用加上
[解决办法]
如果是内部的类直接调用就行,外部的先添加引用DLL文件

读书人网 >C#

热点推荐