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, pode haver 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 System.Deployment.Application namespace quando o common language runtime 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.
Observação
As caixas de diálogo e os comandos de menu que você vê podem ser diferentes daqueles descritos na Ajuda, dependendo de suas configurações ativas ou edição. Para alterar suas 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 usa um assembly sob demanda com o 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 da 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
Microsoft.Samples.ClickOnceOnDemandpara ou para um namespace de sua escolha. Para simplificar, os dois projetos neste passo a passo estão no mesmo namespace.Definir uma classe nomeada
DynamicClasscom uma única propriedade chamadaMessage.Selecione o projeto do Windows Forms no Gerenciador de Soluções. Adicione uma referência ao System.Deployment.Application assembly e a uma referência de projeto ao
ClickOnceLibraryprojeto.Observação
No Visual Basic, recomendamos que você modifique as propriedades do projeto para alterar o namespace raiz deste projeto
Microsoft.Samples.ClickOnceOnDemandpara ou 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 referências a seguir ao formulário.
Adicione o código a seguir para baixar esse assembly sob demanda. Esse 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, nosso grupo também conterá apenas esse único assembly. Em um aplicativo real, você provavelmente deseja 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 um Button da Caixa de Ferramentas para o formulário. Clique duas vezes no botão e adicione o código a seguir ao Click manipulador de eventos.
Marcar conjuntos 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 do Windows Forms no Gerenciador de Soluções e clique em Propriedades. Selecione a guia Publicar .
Clique no botão Arquivos do Aplicativo .
Localize a listagem para ClickOnceLibrary.dll. Defina a caixa suspensa Publicar Status 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 em seu aplicativo ClickOnce usando a Ferramenta de Geração e Edição de Manifesto – Cliente Gráfico (MageUI.exe)
Crie os manifestos do ClickOnce conforme descrito no 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, nessa guia, selecione a guia Arquivos .
Localize 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 a nova montagem
Para testar sua montagem sob demanda:
Inicie seu aplicativo implantado com o ClickOnce.
Quando 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!"