开发者

CodeDom.compiler memory

I am generating assembly on runtime . Problem is that i cant get rid-of it after i am done with it. I need to destroy this assambly what i have created

        string _Errors = "";
        object[] parms = null;

        CodeDomProvider _CodeCompiler = CodeDomProvider.CreateProvider("CSharp"); //new Microsoft.CSharp.CSharpCodeProvider().CreateCompiler();
        CompilerParameters _CompilerParameters = new CompilerParameters();
        _CompilerParameters.GenerateExecutable = false;
        _CompilerParameters.GenerateInMemory = true;
        _CompilerParameters.ReferencedAssemblies.Add("System.Windows.Forms.dll");
        _CompilerParameters.TreatWarningsAsErrors = false;
        _CompilerParameters.CompilerOptions = "/optimize";
        try
        {
            System.CodeDom.Compiler.CompilerResults _CompilerResults = null;
            _CompilerResults = _CodeCompiler.CompileAssemblyFromSource(_CompilerParameters, _SourceCode);
            if (_CompilerResults.Errors.Count > 0)
            {
                _Errors = "";
                foreach (System.CodeDom.Compiler.CompilerError CompEr开发者_开发知识库r in _CompilerResults.Errors)
                {
                    _Errors += "Line number " + CompErr.Line +
                                ", Error Number: " + CompErr.ErrorNumber +
                                ", '" + CompErr.ErrorText + ";\r\n\r\n";
                }
                return false;
            }
            else
            {
                _Errors = null;
            }   _CompilerResults.CompiledAssembly = null;
            _CompilerResults = null;
            _CompilerParameters = null;
            _CodeCompiler.Dispose();
            GC.Collect();}catch{}


I suppose by "get rid of it" you mean "unload". Unfortunatelly (or not so) once loaded into an AppDomain, assemblies cannot be unloaded. To circumvent this, you can generate (or load, for that matter) assembly in a separate AppDomain and then destroy it as needed.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜