【问题标题】:Add Custom Class at runtime, Reference missing在运行时添加自定义类,缺少引用
【发布时间】:2013-05-28 08:43:15
【问题描述】:

我正在尝试在运行时生成代码,该代码使用来自另一个命名空间的自定义类。

这是我的代码:

namespace Test.Programm.Network
{
    class Handler
    {
        public void CreateAssembly()
        {
            string[] code =
            {
                @"using System;
                using System.Collections;


                namespace Test.Programm.Network
                {
                    class HandleMessage 
                    {
                        protected static internal Queue _queue;  
                        public static void Received(string message) 
                        {
                            lock (_queue)
                            { 
                                _queue.Enqueue(message);
                            }
                        } 
                        public HandleMessage() 
                        {
                            _queue = new Queue(); 
                        } 
                    }
                }"
            };

            CompilerParameters parms = new CompilerParameters();

            parms.GenerateExecutable = false;
            parms.GenerateInMemory = true;
            CodeDomProvider compiler = null;
            compiler = CodeDomProvider.CreateProvider("CSharp");

            CompilerResults compilerResults = compiler.CompileAssemblyFromSource(parms, code);
            var cls = compilerResults.CompiledAssembly.GetType("Test.Programm.Network.HandleMessage");

            Assembly assembly = compilerResults.CompiledAssembly;

            var newHandler = assembly.CreateInstance(compilerResults.CompiledAssembly.GetType("Test.Programm.Network.HandleMessage").ToString());
        }
    }

}

但我不想将字符串传递给我的函数,我想将自己的类型传递给该函数。

现在我有一个像这样的简单消息类:

namespace Test.Programm.Messages
{
    public class Message<T>
    {
        string _message;
    }
}

如果我也想在要生成的代码中添加 using Test.Programm.Messages,我会收到此命名空间不存在的错误,缺少参考...

我尝试添加 parms.ReferencedAssemblies.Add("Grid.Node.Messages");到代码生成,但这不起作用。搜索网络,所以还没有给出答案-.-

感谢您的帮助。

【问题讨论】:

    标签: c# runtime .net-assembly


    【解决方案1】:

    您应该引用程序集而不是命名空间。像这样的:

    parms.ReferencedAssemblies.Add("path_to.dll");
    

    其中path_to.dll 是包含Message&lt;T&gt; 类型的程序集文件的路径。

    【讨论】:

    • 天哪 ^^ 尝试了一切,但不是最简单的灵魂。谢谢兄弟
    猜你喜欢
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多