CodeDom.compiler память - PullRequest
       6

CodeDom.compiler память

0 голосов
/ 22 октября 2009

Я генерирую сборку во время выполнения. Проблема в том, что я не могу избавиться от него после того, как с ним покончено. Мне нужно уничтожить то, что я сотворил

        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 CompErr 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{}

1 Ответ

1 голос
/ 22 октября 2009

Я полагаю, под "избавиться от этого" вы подразумеваете "разгрузить". К сожалению (или нет) после загрузки в домен приложений сборки не могут быть выгружены. Чтобы обойти это, вы можете сгенерировать (или загрузить, если на то пошло) сборку в отдельном домене приложений, а затем уничтожить ее при необходимости.

...