1

我已经生成了一个动态程序集,并希望将其保存在数据库中。为此,我在编译器参数中将 GenerateInmemory 设置为 false,然后将 outputassembly 路径作为 C:\xxx.dll 传递。然后我正在做 File.ReadAllBytes(CompilerResults.PathToAssembly) 并将这个 byte[] 保存到数据库中。完成所有这些后,我正在尝试删除我正在访问被拒绝错误文件打开错误的文件。有没有办法关闭文件然后删除文件?

    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

0

由于我是从已编译的程序集中定义程序集,因此它在 appdomain 中加载到文件路径。一旦我创建了字节保存到数据库,然后从工作路径中删除文件并加载程序集。

            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") ;
Assembly assembly = Assembly.Load(assemblyAsArray);
于 2012-08-22T14:37:26.580 回答