Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Por padrão, todos os assemblies incluídos em um aplicativo ClickOnce são baixados quando o aplicativo é executado pela primeira vez. No entanto, você pode ter partes do aplicativo que são usadas por um pequeno conjunto de usuários. Nesse caso, você gostaria de baixar um assembly somente quando criar um dos seus tipos. O passo a passo a seguir demonstra como marcar determinados assemblies em seu aplicativo como "opcionais" e como baixá-los usando classes no namespace System.Deployment.Application quando o Common Language Runtime (CLR) os exige.
Observação
A ApplicationDeployment classe e as APIs no System.Deployment.Application namespace não são compatíveis com .NET Core e .NET 5 e versões posteriores. No .NET 7, há suporte para um novo método de acesso às propriedades de implantação do aplicativo. Para obter mais informações, consulte as propriedades de implantação do Access ClickOnce no .NET. O .NET 7 não dá suporte ao equivalente aos métodos ApplicationDeployment.
Observação
Seu aplicativo terá que ser executado com total confiança para usar esse procedimento.
Pré-requisitos
Você precisará de um dos seguintes componentes para concluir este passo a passo:
O SDK do Windows. O SDK do Windows pode ser baixado no Centro de Download da Microsoft.
Visual Studio.
Criar os projetos
Para criar um projeto que utiliza uma assemblagem sob demanda
Crie um diretório chamado ClickOnceOnDemand.
Abra o Prompt de Comando do SDK do Windows ou o Prompt de Comando do Visual Studio.
Mude para o diretório ClickOnceOnDemand.
Gere um par de chaves pública/privada usando o seguinte comando:
sn -k TestKey.snkUsando o Bloco de Notas ou outro editor de texto, defina uma classe nomeada
DynamicClasscom uma única propriedade chamadaMessage.Salve o texto como um arquivo chamado ClickOnceLibrary.cs ou ClickOnceLibrary.vb, dependendo do idioma usado, no diretório ClickOnceOnDemand .
Compile o arquivo em um assembly.
Para obter o token de chave pública para o assembly, use o seguinte comando:
sn -T ClickOnceLibrary.dllCrie um novo arquivo usando o editor de texto e insira o código a seguir. Esse código cria um aplicativo do Windows Forms que baixa o assembly ClickOnceLibrary quando é necessário.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Reflection; using System.Deployment.Application; using Microsoft.Samples.ClickOnceOnDemand; 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); } } }No código, localize a chamada para LoadFile.
Defina
PublicKeyTokencomo o valor que você recuperou anteriormente.Salve o arquivo como Form1.cs ou Form1.vb.
Compile-o em um executável usando o comando a seguir.
Marcar conjuntos como opcionais
Para marcar assemblies como opcionais em seu aplicativo ClickOnce usando MageUI.exe
Usando MageUI.exe, crie um manifesto do aplicativo, conforme descrito em Passo a passo: implantar manualmente um aplicativo ClickOnce. Use as seguintes configurações para o manifesto do aplicativo:
Nomeie o manifesto
ClickOnceOnDemanddo aplicativo.Na página Arquivos , na linha ClickOnceLibrary.dll , defina a coluna Tipo de Arquivo como Nenhuma.
Na página Arquivos, na linha ClickOnceLibrary.dll, digite
ClickOnceLibrary.dllna coluna Grupo.
Usando MageUI.exe, crie um manifesto de implantação conforme descrito em Passo a passo: implantar manualmente um aplicativo ClickOnce. Use as seguintes configurações para o manifesto de implantação:
- Nomeie o manifesto de implantação
ClickOnceOnDemand.
- Nomeie o manifesto de implantação
Testando a nova montagem
Para testar sua montagem sob demanda
Carregue sua implantação do ClickOnce em um servidor Web.
Inicie seu aplicativo implantado com o ClickOnce de um navegador da Web inserindo a URL no manifesto de implantação. Se você chamar o seu aplicativo ClickOnce
ClickOnceOnDemande carregá-lo no diretório raiz do adatum.com, sua URL ficará assim:http://www.adatum.com/ClickOnceOnDemand/ClickOnceOnDemand.applicationQuando o formulário principal for exibido, pressione a Buttontecla . Você deve ver uma cadeia de caracteres em uma janela de caixa de mensagem que diz "Olá, Mundo!".