无法在 IIS 上的 asp.net MVC 中释放文件

Can't release file in asp.net MVC on IIS

这是我创建的函数:

if (Valide())
{
    try
    {
        File.Delete(Server.MapPath("F16client.pdf"));
    }
    catch
    {
    }

    using (FileStream ms = new FileStream(Server.MapPath("F16client.pdf"), FileMode.Create, FileAccess.Write, FileShare.None))
    {
        PdfReader lecteur = new PdfReader(Server.MapPath("~/Formulaires/f16.pdf"));

        PdfStamper etampeur = new PdfStamper(lecteur, ms);

        // DO STUFF, Whatever

        etampeur.FormFlattening = true;
        etampeur.Close();
        lecteur.Close();

        System.Net.Mail.Attachment at = new Attachment(Server.MapPath("F16client.pdf"));                                            
    }
}

它在本地测试时有效,但在 IIS 上,这个 W3W 进程不会放过我的 f16client.pdf,我总是以 :

结束

The process cannot access the file 'D:\inetpub\wwwroot\Formulaire16\F16client.pdf' because it is being used by another process.

为什么该文件在 IIS 上仍在使用,而在本地测试时却没有??????

检查 IIS 上应用程序池用户的访问权限。然后使用以下代码重试:

var file = Server.MapPath("F16client.pdf")
File.SetAttributes(file, FileAttributes.Normal);
File.Delete(file);

这可能是权限或文件属性问题。

嗯...这里没有魔法。感谢 Feryal Badili 指出问题,电子邮件附件实际上包含资源...

所以,一个简单的:

    at.Dispose();

在功能结束之前,一切都很好。是的...

它在本地工作的原因可能是因为我每次测试时都按下 stop everything 按钮,因此,每次它尝试我的功能时我都在杀死手柄。