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 アプリケーションで "optional" としてマークされたすべてのファイルには、グループ名が必要です。All files marked "optional" in a ClickOnceClickOnce application require a group name.

例外

groupName パラメーターが null であるか、長さが 0 です。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アプリケーションでは、アプリケーションマニフェストで "optional" とマークされたファイルは、初期化または更新中にダウンロードされません。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ダウンロードしたアセンブリを使用するには、のCurrentDomainイベントAssemblyResolveにイベントリスナーをアタッチします。To use an assembly you have downloaded with DownloadFileGroup, you attach an event listener to the AssemblyResolve event on the CurrentDomain. 例については、「」を参照してください。デザイナーを使用し、ClickOnce 配置 API で必要に応じてアセンブリをダウンロードする」を参照してください。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.

ファイル名だけで1つのファイルをダウンロードすることはできません。You cannot download a single file by its file name alone. 1つのファイルをダウンロードするには、 ClickOnceClickOnceデプロイ内のグループ名を割り当て、この方法を使用してグループをダウンロードします。To download a single file, assign it a group name in your ClickOnceClickOnce deployment and download the group using this method.

適用対象

こちらもご覧ください