title: Access Denied while deleting the assembly created by a CodeDomProvider compile?
body: <p>If you use the CodeDomProvider class in .NET after the compilation is complete you can't delete the output assembly. I want to be able to delete the output assembly. File.Delete returns an access denied exception.</p>
  
  <pre><code>string asmPath = Path.Combine(Path.GetTempPath(), Guid.NewGuid().ToString("N") + ".exe");
  string keyPath = "some path to a *.snk file that works";
  // build compiler
  CodeDomProvider dom = CodeDomProvider.CreateProvider("VisualBasic");
  CompilerParameters cp = new CompilerParameters();
  cp.TreatWarningsAsErrors = false;
  cp.GenerateInMemory = false;
  cp.GenerateExecutable = true;
  cp.CompilerOptions = "/target:winexe /keyfile:\"" + keyPath + "\"";
  cp.OutputAssembly = asmPath;
  // add all the other assembly references
  string netPath = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\";
  cp.ReferencedAssemblies.Add(netPath + @"System.dll");
  cp.ReferencedAssemblies.Add(netPath + @"System.Core.dll");
  cp.ReferencedAssemblies.Add(netPath + @"System.Data.dll");
  cp.ReferencedAssemblies.Add(netPath + @"System.Xml.dll");
  CompilerResults cr = dom.CompileAssemblyFromSource(cp, new string[] { code });
  if (cr.Errors.Count == 0)
  {
      cr.TempFiles.Delete();
      dom.Dispose();
  // do stuff
  ...
  //
      File.Delete(asmPath); // fails here Access Denied
  }
  </code></pre>
  
  <p><em>Edit</em> As a work around I'm using a static constructor on the class that searches the temp folder and deletes previously created assemblies.</p>