首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

ASP.Net动态编译,生成dll资料

2013-03-13 
ASP.Net动态编译,生成dll文件如题?看了一些网上的资料,没看明白。大部分都是控制台或 winform项目。我的是AS

ASP.Net动态编译,生成dll文件
如题?看了一些网上的资料,没看明白。大部分都是控制台或 winform项目。我的是ASP.Net网站。


protected void Button1_Click(object sender, System.EventArgs e)
{
        string s=@"using System;
                  public class test
                  {
                       public void HelloWorld()
                       {
               
                        }
                    }";
}

/// <summary>
/// 动态编译
/// </summary>
/// <param name="source"> 要动态编译的代码字符串</param>
/// <param name="path">生成dll文件的路径</param>
private void csc(string source, string path)

    //-------------
}



如上面的,就相当于在cmd中执行了
csc /target:library /out:e:\test.dll /recurse:d:\test.cs

请高手指教! asp.net 动态编译
[解决办法]
参考一下这个
using System.IO;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;


            ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler());  
            CompilerParameters cp = new CompilerParameters();
            cp.ReferencedAssemblies.Add("system.dll");
            cp.GenerateExecutable = false;
            cp.GenerateInMemory = true;

 StreamReader sr = new StreamReader("d:\\test.cs");
                CompilerResults cr = complier.CompileAssemblyFromSource(cp, "using System;\r\n" + sr.ReadToEnd());
                 sr.Close();
                 Assembly a = cr.CompiledAssembly;
                 object cls = a.CreateInstance("命名空间.类名称");

[解决办法]
什么项目类型有关系么?

看一下MSDN中CSharpCodeProvider 类的示例,简单来说就是这样:
/// <summary>
        /// 动态编译
        /// </summary>
        /// <param name="source"> 要动态编译的代码字符串</param>


        /// <param name="path">生成dll文件的路径</param>
        private void csc(string source, string path)
        {
            CodeDomProvider ccp = CodeDomProvider.CreateProvider("CSharp");
            CompilerParameters options = new CompilerParameters();
            options.GenerateInMemory = true;
            options.GenerateInMemory = false;
            options.TreatWarningsAsErrors = false;
            options.OutputAssembly = path;
            CompilerResults result = ccp.CompileAssemblyFromSource(options, source);
        }


[解决办法]
1楼和4楼的说的都是正确的,经测试4楼群的可行,楼主可以结贴了

热点排行