İzlenecek yol: Tasarım Aracı kullanarak ClickOnce dağıtım API'siyle isteğe bağlı derlemeleri indirme

Varsayılan olarak, bir ClickOnce uygulamasına dahil edilen tüm derlemeler, uygulama ilk çalıştırıldığında indirilir. Ancak, uygulamanızın küçük bir kullanıcı kümesi tarafından kullanılan bölümleri olabilir. Bu durumda, derlemeyi yalnızca türlerinden birini oluşturduğunuzda indirmek istersiniz. Aşağıdaki kılavuzda, uygulamanızdaki bazı derlemelerin "isteğe bağlı" olarak nasıl işaretlenecek ve ortak dil çalışma zamanı gerektirdiğinde ad alanında System.Deployment.Application sınıfları kullanarak bunları nasıl indirebileceğiniz gösterilmektedir.

Not

ApplicationDeployment Ad alanı içindeki System.Deployment.Application sınıf ve API'ler .NET Core ve .NET 5 ve sonraki sürümlerde desteklenmez. .NET 7'de, uygulama dağıtım özelliklerine erişmek için yeni bir yöntem desteklenir. Daha fazla bilgi için bkz . .NET'te ClickOnce dağıtım özelliklerine erişme. .NET 7, ApplicationDeployment yöntemlerinin eşdeğerini desteklemez.

Not

Bu yordamı kullanmak için uygulamanızın tam güven içinde çalışması gerekir.

Not

Gördüğünüz iletişim kutuları ve menü komutları, etkin ayarlarınıza ve ürün sürümüne bağlı olarak Yardım menüsünde açıklanana göre farklılık gösterebilir. Ayarlarınızı değiştirmek için Araçlar menüsünde İçeri ve Dışarı Aktar Ayarlar'e tıklayın. Daha fazla bilgi için bkz . Ayarları sıfırlama.

Projeleri oluşturma

Visual Studio ile isteğe bağlı derleme kullanan bir proje oluşturmak için

  1. Visual Studio'da yeni bir Windows Forms projesi oluşturun. Dosya menüsünde Ekle'nin üzerine gelin ve Yeni Proje'ye tıklayın. İletişim kutusunda bir Sınıf Kitaplığı projesi seçin ve adını verin ClickOnceLibrary.

    Not

    Visual Basic'te, proje özelliklerini değiştirerek bu projenin Microsoft.Samples.ClickOnceOnDemand kök ad alanını istediğiniz ad alanına veya ad alanına değiştirmenizi öneririz. Kolaylık olması için, bu kılavuzdaki iki proje aynı ad alanında yer alır.

  2. adlı tek bir özellik ile adlı DynamicClass Messagebir sınıf tanımlayın.

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace Microsoft.Samples.ClickOnceOnDemand
    {
        public class DynamicClass
        {
            public DynamicClass() {}
    
            public string Message
            {
                get
                {
                    return ("Hello, world!");
                }
            }
        }
    }
    
  3. Çözüm Gezgini'da Windows Forms projesini seçin. Derlemeye System.Deployment.Application bir başvuru ve projeye proje başvurusu ClickOnceLibrary ekleyin.

    Not

    Visual Basic'te, proje özelliklerini değiştirerek bu projenin Microsoft.Samples.ClickOnceOnDemand kök ad alanını istediğiniz ad alanına veya ad alanına değiştirmenizi öneririz. Kolaylık olması için, bu kılavuzdaki iki proje aynı ad alanında bulunur.

  4. Forma sağ tıklayın, menüden Kodu Görüntüle'ye tıklayın ve forma aşağıdaki başvuruları ekleyin.

    using System.Reflection;
    using System.Deployment.Application;
    using Microsoft.Samples.ClickOnceOnDemand;
    using System.Security.Permissions;
    
  5. Bu derlemeyi isteğe bağlı olarak indirmek için aşağıdaki kodu ekleyin. Bu kod, bir derleme kümesini genel Dictionary bir sınıf kullanarak grup adıyla eşlemeyi gösterir. Bu kılavuzda yalnızca tek bir derleme indirdiğimiz için grubumuzda yalnızca bir derleme vardır. Gerçek bir uygulamada, uygulamanızdaki tek bir özellikle ilgili tüm derlemeleri aynı anda indirmek isteyebilirsiniz. Eşleme tablosu, bir özelliğe ait tüm DLL'leri indirme grubu adıyla ilişkilendirerek bunu kolayca yapmanızı sağlar.

    // 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>();
    
    [SecurityPermission(SecurityAction.Demand, ControlAppDomain=true)]
    public Form1()
    {
        InitializeComponent();
    
        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");
            }
            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);
    }
    
  6. Görünüm menüsünde Araç Kutusu'na tıklayın. Araç Kutusu'ndan forma bir Button sürükleyin. Düğmeye çift tıklayın ve aşağıdaki kodu olay işleyicisine Click ekleyin.

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

Derlemeleri isteğe bağlı olarak işaretleme

Visual Studio kullanarak ClickOnce uygulamanızda derlemeleri isteğe bağlı olarak işaretlemek için

  1. Çözüm Gezgini'da Windows Forms projesine sağ tıklayın ve Özellikler'e tıklayın. Yayımla sekmesini seçin.

  2. Uygulama Dosyaları düğmesine tıklayın.

  3. ClickOnceLibrary.dll listesini bulun. Yayımlama Durumu açılan kutusunu Ekle olarak ayarlayın.

  4. Grup açılan kutusunu genişletin ve Yeni'yi seçin. Adı ClickOnceLibrary yeni grup adı olarak girin.

  5. Uygulamanızı Yayımlama Sihirbazı'nı kullanarak Nasıl yapılır: ClickOnce uygulaması yayımlama bölümünde açıklandığı gibi yayımlamaya devam edin.

Bildirim Oluşturma ve Düzenleme Aracı — Grafik İstemcisi (MageUI.exe) kullanarak ClickOnce uygulamanızda derlemeleri isteğe bağlı olarak işaretlemek için

  1. ClickOnce bildirimlerinizi İzlenecek Yol: ClickOnce uygulamasını el ile dağıtma başlığı altında açıklandığı gibi oluşturun.

  2. MageUI.exe kapatmadan önce dağıtımınızın uygulama bildirimini içeren sekmeyi seçin ve bu sekmenin içinde Dosyalar sekmesini seçin.

  3. Uygulama dosyaları listesinde ClickOnceLibrary.dll bulun ve Dosya Türü sütununu Yok olarak ayarlayın. Grup sütunu için yazınClickOnceLibrary.dll.

Yeni derlemeyi test edin

İsteğe bağlı derlemenizi test etmek için:

  1. ClickOnce ile dağıtılan uygulamanızı başlatın.

  2. Ana formunuz göründüğünde tuşuna Buttonbasın. İleti kutusu penceresinde "Merhaba, Dünya!" yazan bir dize görmeniz gerekir