Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

ApplicationDeployment.DownloadFileGroup méthode (String)

 

Date de publication : novembre 2016

Télécharge un ensemble de fichiers facultatifs à la demande.

Espace de noms:   System.Deployment.Application
Assembly:  System.Deployment (dans System.Deployment.dll)

[PermissionSetAttribute(SecurityAction.Assert, Name = "FullTrust")]
public void DownloadFileGroup(
	string groupName
)

Paramètres

groupName
Type: System.String

Le groupe nommé de fichiers à télécharger. Tous les fichiers marqués « facultatifs » dans un ClickOnce application nécessite un nom de groupe.

Exception Condition
ArgumentNullException

Le groupName paramètre est null ou vide.

Dans un ClickOnce application, les fichiers marqués comme « facultatifs » dans le manifeste d’application ne sont pas téléchargés pendant l’initialisation ou de mise à jour. Vous pouvez utiliser la DownloadFileGroup méthode pour télécharger tous les fichiers appartenant à un groupe nommé à la demande, afin de ne pas consommer les ressources réseau et l’espace disque jusqu'à ce que l’utilisateur les requiert. Par exemple, certains utilisateurs devrez peut-être utiliser un package d’analyse de données inclus dans votre application au quotidien, tandis que les autres utilisateurs peuvent l’appeler jamais.

Pour utiliser un assembly que vous avez téléchargé avec DownloadFileGroup, vous attachez un écouteur d’événements pour le AssemblyResolve événement sur le CurrentDomain. Pour obtenir un exemple, consultez =Procédure pas à pas : téléchargement d'assemblys à la demande avec l'API du déploiement ClickOnce à l'aide du concepteur.

Tous les fichiers sont téléchargés vers le ClickOnce cache d’application et sont donc séparés de la version actuelle de l’application. Supposons qu’une fois une application télécharge un groupe de fichiers, l’utilisateur installe une nouvelle version de l’application, mais rétablit ensuite la version précédente de l’application. Dans ce cas, la version précédente ne dispense pas les copies des fichiers qu’elle avait téléchargés. Pour plus d’informations sur l’accès aux fichiers de données, consultez la page Accès aux données locales et distantes dans les applications ClickOnce.

DownloadFileGroup fonctionne dans les applications de confiance partielle, c'est-à-dire dans les ClickOnce application qui s’exécute avec une autorisation restreinte. Toutefois, si vous tentez de charger dynamiquement des assemblys, votre application nécessite la confiance totale.

À la demande de téléchargement des fichiers de données n’est pas pris en charge actuellement.

Votre application ne sera pas réactive aux entrées d’utilisateur jusqu'à ce que le DownloadFileGroup le retour de méthode. Si vous avez besoin de télécharger des fichiers sans interrompre le flux de travail de l’utilisateur, utilisez la DownloadFileGroupAsync méthode à la place.

Vous ne pouvez pas télécharger un fichier unique par son seul nom de fichier. Pour télécharger un fichier unique, attribuez-lui un nom de groupe dans votre ClickOnce déploiement et téléchargez le groupe à l’aide de cette méthode.

L’exemple de code suivant montre comment charger un assembly à la demande en écoutant le AssemblyResolve événement.

namespace ClickOnceOnDemand
{
    [System.Security.Permissions.SecurityPermission(System.Security.Permissions.SecurityAction.Demand, Unrestricted=true)]
    public class Form1 : Form
    {
        // Maintain a dictionary mapping DLL names to download file groups. This is trivial for this sample,
        // but will be important in real-world applications where a feature is spread across multiple DLLs,
        // and you want to download all DLLs for that feature in one shot. 
        Dictionary<String, String> DllMapping = new Dictionary<String, String>();

        public static void Main()
        {
            Form1 NewForm = new Form1();
            Application.Run(NewForm);
        }

        public Form1()
        {
            // Configure form. 
            this.Size = new Size(500, 200);
            Button getAssemblyButton = new Button();
            getAssemblyButton.Size = new Size(130, getAssemblyButton.Size.Height);
            getAssemblyButton.Text = "Test Assembly";
            getAssemblyButton.Location = new Point(50, 50);
            this.Controls.Add(getAssemblyButton);
            getAssemblyButton.Click += new EventHandler(getAssemblyButton_Click);

            DllMapping["ClickOnceLibrary"] = "ClickOnceLibrary";
            AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
        }

        /*
         * Use ClickOnce APIs to download the assembly on demand.
         */
        private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            Assembly newAssembly = null;

            if (ApplicationDeployment.IsNetworkDeployed)
            {
                ApplicationDeployment deploy = ApplicationDeployment.CurrentDeployment;

                // Get the DLL name from the Name argument.
                string[] nameParts = args.Name.Split(',');
                string dllName = nameParts[0];
                string downloadGroupName = DllMapping[dllName];

                try
                {
                    deploy.DownloadFileGroup(downloadGroupName);
                }
                catch (DeploymentException de)
                {
                    MessageBox.Show("Downloading file group failed. Group name: " + downloadGroupName + "; DLL name: " + args.Name);
                    throw (de);
                }

                // Load the assembly.
                // Assembly.Load() doesn't work here, as the previous failure to load the assembly
                // is cached by the CLR. LoadFrom() is not recommended. Use LoadFile() instead.
                try
                {
                    newAssembly = Assembly.LoadFile(Application.StartupPath + @"\" + dllName + ".dll," +  
			"Version=1.0.0.0, Culture=en, PublicKeyToken=03689116d3a4ae33");
                }
                catch (Exception e)
                {
                    throw (e);
                }
            }
            else
            {
                //Major error - not running under ClickOnce, but missing assembly. Don't know how to recover.
                throw (new Exception("Cannot load assemblies dynamically - application is not deployed using ClickOnce."));
            }


            return (newAssembly);
        }

        private void getAssemblyButton_Click(object sender, EventArgs e)
        {
            DynamicClass dc = new DynamicClass();
            MessageBox.Show("Message: " + dc.Message);
        }
    }
}

.NET Framework
Disponible depuis 2.0
Retour au début
Afficher: