Ho usato questa tempo fa e funzionava bene (però fa comparire la Dialog di richiesta salvataggio):
codice:
        Dim path As String = Me.Server.MapPath("testo.txt")
        Dim fi As FileInfo = New FileInfo(path)

        If fi.Exists Then
            ' Imposta le headers 
            Response.Clear()
            Response.AddHeader("Content-Disposition", "attachment; filename=""" & fi.Name & """")
            Response.AddHeader("Content-Length", fi.Length.ToString())
            Response.ContentType = "application/octet-stream"

            ' Leggo dal file e scrivo nello stream di risposta 
            Response.WriteFile(path)
        Else
            Response.Write("File non trovato")
        End If
        Response.End() (facoltativo)