動的アセンブリを生成し、それをデータベースに保存したいと考えています。これを行うには、コンパイラ パラメータで GenerateInmemory を false に設定し、outputassembly パスを C:\xxx.dll として渡しました。次に、 File.ReadAllBytes(CompilerResults.PathToAssembly) を実行し、この byte[] をデータベースに保存しています。これがすべて完了したら、ファイルを削除しようとしています。アクセス拒否エラー File Open error が発生しています。ファイルを閉じてから削除する方法はありますか?
CompilerParameters cParams = new CompilerParameters();
cParams.GenerateInMemory = false;
cParams.IncludeDebugInformation = false;
CodeDomProvider cProvider =
CodeDomProvider.CreateProvider("CSharp");
cParams.OutputAssembly = @"c:\xxx.dll";
cParams.ReferencedAssemblies.Add("System.dll");
cParams.ReferencedAssemblies.Add("System.Xml.dll");
CompilerResults cr =
cProvider.CompileAssemblyFromSource(cParams, sw.GetStringBuilder().ToString());
if (cr.Errors.Count > 0)
{
foreach (CompilerError error in cr.Errors)
{
Console.WriteLine(error.ErrorText);
}
}
Assembly assembly =cr.CompiledAssembly;
byte[] assemblyAsArray = File.ReadAllBytes(cr.PathToAssembly);
...........
//save to database here
File.Delete(@"c:\xxx.dll") => getting error here