문제

런타임에 어셈블리를 생성하고 있습니다. 문제는 내가 끝난 후에 그것을 제거 할 수 없다는 것입니다. 내가 만든 것을 파괴해야합니다.

        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{}
도움이 되었습니까?

해결책

나는 "그것을 제거"하면 "언로드"를 의미한다고 생각합니다. 불행히도 (또는 그렇지 않은) 일단 앱 도메인에로드되면 어셈블리를 내릴 수 없습니다. 이것을 우회하기 위해, 당신은 별도의 appdomain에서 어셈블리를 생성 (또는로드) 할 수있는 다음 필요에 따라 파괴 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top