1

動的アセンブリを生成し、それをデータベースに保存したいと考えています。これを行うには、コンパイラ パラメータで 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
4

1 に答える 1