문제
런타임에 어셈블리를 생성하고 있습니다. 문제는 내가 끝난 후에 그것을 제거 할 수 없다는 것입니다. 내가 만든 것을 파괴해야합니다.
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에서 어셈블리를 생성 (또는로드) 할 수있는 다음 필요에 따라 파괴 할 수 있습니다.
제휴하지 않습니다 StackOverflow