Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. 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, pode haver partes do seu aplicativo que são usadas por um pequeno conjunto de usuários. Nesse caso, você deseja baixar um assembly somente quando criar um de seus tipos. O passo a passo a seguir demonstra como marcar determinados assemblies na sua aplicação como "opcionais" e como baixá-los usando classes no System.Deployment.Application namespace quando o common language runtime os exige.
Observação
A classe ApplicationDeployment e as APIs no namespace System.Deployment.Application não são suportadas no .NET Core e no .NET 5 e versões posteriores. No .NET 7, um novo método de acessar propriedades de implantação de aplicativo é suportado. Para obter mais informações, consulte Acessar propriedades de implantação do ClickOnce no .NET. O .NET 7 não suporta o equivalente aos métodos ApplicationDeployment.
Observação
Seu aplicativo terá que ser executado em total confiança para usar este procedimento.
Observação
As caixas de diálogo e os comandos de menu exibidos podem ser diferentes dos descritos na Ajuda, dependendo das configurações ativas ou da edição. Para alterar as configurações, clique em Importar e exportar configurações no menu Ferramentas . Para obter mais informações, consulte Redefinir configurações.
Criar os projetos
Para criar um projeto que utiliza um assembly on-demand no Visual Studio
Crie um novo projeto do Windows Forms no Visual Studio. No menu Arquivo , aponte para Adicionar e clique em Novo Projeto. Escolha um projeto de Biblioteca de Classes na caixa de diálogo e nomeie-o
ClickOnceLibrary.Observação
No Visual Basic, recomendamos que você modifique as propriedades do projeto para alterar o namespace raiz deste projeto para
Microsoft.Samples.ClickOnceOnDemandou para um namespace de sua escolha. Para simplificar, os dois projetos neste passo a passo estão no mesmo namespace.Defina uma classe nomeada
DynamicClasscom uma única propriedade chamadaMessage.Selecione o projeto Windows Forms no Gerenciador de Soluções. Adicione uma referência ao assembly System.Deployment.Application e uma referência ao projeto
ClickOnceLibrary.Observação
No Visual Basic, recomendamos que você modifique as propriedades do projeto para alterar o namespace raiz deste projeto para
Microsoft.Samples.ClickOnceOnDemandou para um namespace de sua escolha. Para simplificar, os dois projetos neste passo a passo estão localizados no mesmo namespace.Clique com o botão direito do mouse no formulário, clique em Exibir código no menu e adicione as seguintes referências ao formulário.
Adicione o seguinte código para baixar este assembly sob demanda. Este código mostra como mapear um conjunto de assemblies para um nome de grupo usando uma classe genérica Dictionary . Como estamos baixando apenas um único assembly neste passo a passo, há apenas um assembly em nosso grupo. Em um aplicativo real, você provavelmente desejaria baixar todos os assemblies relacionados a um único recurso em seu aplicativo ao mesmo tempo. A tabela de mapeamento permite que você faça isso facilmente, associando todas as DLLs que pertencem a um recurso com um nome de grupo de download.
// 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); }No menu Exibir , clique em Caixa de Ferramentas. Arraste a Button da Caixa de Ferramentas para o formulário. Clique duas vezes no botão e adicione o seguinte código ao Click manipulador de eventos.
Marcar montagens como opcionais
Para marcar assemblies como opcionais em seu aplicativo ClickOnce usando o Visual Studio
Clique com o botão direito do mouse no projeto Windows Forms no Gerenciador de Soluções e clique em Propriedades. Selecione a guia Publicar .
Clique no botão Arquivos de aplicativo .
Encontre a listagem para ClickOnceLibrary.dll. Defina a caixa suspensa Status da publicação como Incluir.
Expanda a caixa suspensa Grupo e selecione Novo. Insira o nome
ClickOnceLibrarycomo o novo nome do grupo.Continue publicando seu aplicativo conforme descrito em Como: Publicar um aplicativo ClickOnce usando o Assistente de publicação.
Para marcar assemblies como opcionais na sua aplicação ClickOnce usando a Ferramenta de Geração e Edição de Manifesto — Cliente Gráfico (MageUI.exe)
Crie seus manifestos ClickOnce conforme descrito em Passo a passo: implantar manualmente um aplicativo ClickOnce.
Antes de fechar MageUI.exe, selecione a guia que contém o manifesto do aplicativo da implantação e, dentro dessa guia, selecione a guia Arquivos .
Encontre ClickOnceLibrary.dll na lista de arquivos de aplicativo e defina sua coluna Tipo de arquivo como Nenhum. Para a coluna Grupo , digite
ClickOnceLibrary.dll.
Testar o novo conjunto
Para testar sua montagem sob demanda:
Inicie seu aplicativo implantado com ClickOnce.
Quando o formulário principal for exibido, pressione o Button. Você deve ver uma cadeia de caracteres em uma janela de caixa de mensagem que diz: "Olá, Mundo!"