Não é possível excluir arquivos temporários após o retorno do FileStream

Eu tenho uma função em um aplicativo C # MVC que cria um diretório temporário e um arquivo temporário, em seguida, abre o arquivo usando FileStream, retorna o FileStream para uma função de chamada e, em seguida, precisa excluir os arquivos temporários. No entanto, não sei como excluir o diretório e o arquivo temporário porque ele sempre comete erros dizendo que "o processo não pode acessar o arquivo porque está sendo usado por outro processo". Isso é o que eu tentei, mas o FileStream ainda está usando o arquivo temporário no bloco finally. Como posso retornar o FileStream e excluir os arquivos temporários?

public FileStream DownloadProjectsZipFileStream()
{
    Directory.CreateDirectory(_tempDirectory);
    // temporary file is created here
    _zipFile.Save(_tempDirectory + _tempFileName);

    try
    {
        FileStream stream = new FileStream(_tempDirectory + _tempFileName, FileMode.Open);
        return stream;
    }
    finally
    {
        File.Delete(_tempDirectory + _tempFileName);
        Directory.Delete(_tempDirectory);
    }
}

A função para a qual o FileStream é retornado se parece com isso:

public ActionResult DownloadProjects ()
{
    ProjectDownloader projectDownloader = new ProjectDownloader();

    FileStream stream = projectDownloader.DownloadProjectsZipFileStream();
    return File(stream, "application/zip", "Projects.zip");
}

Atualizar: Esqueci de mencionar que o arquivo zip tem 380 MB. Eu recebo um sistema de exceção de memória ao usar um MemoryStream.

questionAnswers(5)

yourAnswerToTheQuestion