ApplicationDeployment.DownloadFileGroup(String) Метод

Определение

Загружает по требованию набор необязательных файлов.Downloads a set of optional files on demand.

public:
 void DownloadFileGroup(System::String ^ groupName);
public void DownloadFileGroup (string groupName);
member this.DownloadFileGroup : string -> unit
Public Sub DownloadFileGroup (groupName As String)

Параметры

groupName
String

Именованная группа файлов для загрузки.The named group of files to download. Для всех файлов, помеченных как "необязательные" в приложении ClickOnceClickOnce, следует указать имя группы.All files marked "optional" in a ClickOnceClickOnce application require a group name.

Исключения

Параметр groupName имеет значение null или нулевую длину.The groupName parameter is null or zero-length.

Примеры

В следующем примере кода показано, как загрузить сборку по запросу, прослушивая событие AssemblyResolve.The following code example demonstrates how to load an assembly on demand by listening for the AssemblyResolve event.

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);
        }
    }
}

Комментарии

В приложении ClickOnceClickOnce файлы, помеченные как "необязательные" в манифесте приложения, не загружаются во время инициализации или обновления.In a ClickOnceClickOnce application, the files marked "optional" in the application manifest are not downloaded during initialization or update. Метод DownloadFileGroup можно использовать для загрузки всех файлов, принадлежащих именованной группе по запросу, чтобы они не использовали сетевые ресурсы и место на диске, пока пользователь не потребует их.You can use the DownloadFileGroup method to download all of the files belonging to a named group on demand, so that they do not consume network resources and disk space until you are sure the user requires them. Например, некоторым пользователям может потребоваться ежедневно использовать пакет анализа данных, включенный в приложение, в то время как другие пользователи не могут вызывать его.For example, certain users may need to use a data analysis package included in your application on a daily basis, while other users may never invoke it.

Чтобы использовать сборку, скачанную с DownloadFileGroup, необходимо подключить прослушиватель событий к событию AssemblyResolve на CurrentDomain.To use an assembly you have downloaded with DownloadFileGroup, you attach an event listener to the AssemblyResolve event on the CurrentDomain. Пример см. в разделе =Пошаговое руководство. Загрузка сборок по запросу с помощью API развертывания ClickOnce в конструкторе.For an example, see =Walkthrough: Downloading Assemblies on Demand with the ClickOnce Deployment API Using the Designer.

Все файлы загружаются в кэш приложения ClickOnceClickOnce и, следовательно, изолированы от текущей версии приложения.All files are downloaded to the ClickOnceClickOnce application cache and are therefore isolated to the current version of the application. Предположим, что после того, как приложение загрузит файловую группу, пользователь установит новую версию приложения, но позднее вернется к предыдущей версии приложения.Let's say that after an application downloads a file group, the user installs a new version of the application, but later reverts to the previous version of the application. В этом случае предыдущая версия по-прежнему будет иметь копии первоначально загруженных файлов.In this case, the previous version will still have the copies of the files it originally downloaded. Дополнительные сведения о доступе к файлам данных см. в разделе доступ к локальным и удаленным данным в приложениях ClickOnce.For more information about accessing data files, see Accessing Local and Remote Data in ClickOnce Applications.

DownloadFileGroup работает в приложениях с частичным доверием, то есть во всех ClickOnceClickOnce приложениях, работающих с ограниченными разрешениями.DownloadFileGroup works in partially trusted applications, that is, in any ClickOnceClickOnce application running with restricted permission. Однако при попытке загрузить сборки динамически, приложению потребуется полное доверие.However, if you attempt to load assemblies dynamically, your application will require full trust.

Загрузка файлов данных по требованию в настоящее время не поддерживается.On-demand downloading of data files is currently not supported.

Приложение не будет реагировать на ввод данных пользователем до тех пор, пока метод DownloadFileGroup не вернет значение.Your application will not be responsive to user input until the DownloadFileGroup method returns. Если необходимо загрузить файлы, не прерывая рабочий процесс пользователя, используйте вместо этого метод DownloadFileGroupAsync.If you need to download files without interrupting the user's workflow, use the DownloadFileGroupAsync method instead.

Нельзя загрузить один файл только по имени файла.You cannot download a single file by its file name alone. Чтобы скачать один файл, назначьте ему имя группы в ClickOnceClickOnce развертывания и скачайте группу с помощью этого метода.To download a single file, assign it a group name in your ClickOnceClickOnce deployment and download the group using this method.

Применяется к

Дополнительно