Inserindo Imagem em DLL

A alguns dias atrás, comecei a desenvolver um Framework para que eu pudesse incorporar em minhas aplicações e que pudesse reaproveitá-la constantemente. Nela contém classes de conexão, criação de objetos dinamicamente e imagens. Estava quase pronto quando me deparei com a parte das imagens. Eu queria que as imagens ficassem na DLL e quando eu fosse atualizar uma aplicação, eu só substituiria a DLL e não esquecesse dos arquivos.

Óbvio que comecei a ler alguns materiais na Internet para saber qual o melhor método para desenvolver. Por mais que eu lia, mais eu achava complicado. E outros, quanto eu mais fazia mais eu achava que estava errado. Até que então consegui...

Você pode utilizar de duas formas: chamando dentro da própria DLL ou através de uma página ASPX para, ao final, gerar uma imagem. Irei explicar como pois é praticamente a mesma coisa...

No Visual Studio, abra seu projeto (ele deve ser um Class Library). Clique com o direito sobre a Solução na aba do Solution Explorer e escolha a opção Properties. Irá abrir o conjunto de propriedades vigentes da DLL. Entre na aba Resources e notará a seguinte tela:


Nesse caso ele diz que não, por padrão, nenhum recurso. Clique sobre o link para adicionarmos um. Agora, vá em Add Resource, New Image e escolha um dos tipos de imagem suportado ou escolha Add Existing File... para selecionar uma imagem existente no disco.


Se escolhido a primeira opção terá que dar um nome que o identifique para que possamos invocá-lo posteriormente e terá que desenhar ou incorporar uma imagem no editor que irá abrir. Caso contrário, a segunda opção é a mais rápida pois iremos apenas selecionar uma imagem que ela já será incoporada.

Logo após incorporá-la nos recursos, verá, através do Solution Explorer, que foi criada uma pasta chamada Resources contendo a imagem desejada. Agora iremos permitir também que a imagem seja "chamada" ou, melhor dizendo, seja embedded. Para isso, clique com o direito sobre a imagem e entre em Properties. No Build Action, escolha a propriedade Embedded Resource.

Agora, vá na pasta Properties da solução e abra o arquivo AssemblyInfo.cs. Adicione o namespace:

using System.Web.UI;

E adicione a seguinte linha no final (pode ser depois de todas que tiverem):

[assembly: WebResource("Framework.Resources.Calendario.png", "image/png")]

Sendo que é constituído por:

  • Framework: é o namespace que compõe sua solução, no meu caso estava utilizando o namespace Framework;
  • Resources: indica o nome da pasta onde está o recurso;
  • Imagem

Assim a imagem já está incorporada à DLL e prontra para uso. Para invocarmos, conforme descrito anteriormente, pode ser de duas formas: de dentro da DLL e fora dela.

Por dentro, podemos gerar um objeto Image e adicionar seu atributo ImageUrl diretamente:

Image imagem = new Image();

imagem.ImageUrl = ClientScript.GetWebResourceUrl(this.GetType(), "Framework.Resources.Calendario.png");

Pode-se utilizar a mesma forma de invocação quando for chamar de fora da DLL pelo CodeBehind. Se for chamar direto na página ASPX basta utilizar as tags <%= %>colocando dentro o método de invocação do recurso.

Você pode utilizar essa forma de acoplamento de recursos para alguns outros tipos de objetos como JavaScript, por exemplo. Lembrando que não é bom ter uma DLL muito grande com diversos objetos. Caso for de extrema importância mantê-lo na DLL, fragmente-os em diversas outras DLLs.

0 comentários:

Postar um comentário