C# custom UI's - C# - Portugal-a-Programar
C# custom UI's
By Sion, January 15, 2010 in C#
Como alguns de voces ja devem saber existiem alguns softwares/ou DLL's na net que permitem adiconar mais elementos UI (controlos, buttons, textbox etc) aos Visual studio como o RadControls ou o Infraegistics.
Tenho andado a mexer com isto so que surgiu-me aqui um obstáculo, é poder abrir o projecto c# num PC que tenha o VS mas que n tenha esse software instalado, ou conseguir correr a aplicação no tal PC, dá-me sempre erro. :wallbash:
Como o sofware, e os ficheiros que permitem adicionar esses controlos ás Forms sao DLL's exprimentei copia-las e pô-las numa pasta no projecto mas nem assim dá .
Se alguém souber alguma coisa, agradecia. thx
_________________Cenas pá.
Usar um Setup por usar é completamente irrelevante, não é isso que vai fazer as coisas funcionar. O Setup só vai copiar os DLLs para onde o programador quiser.
Essas bibliotecas, por norma, só necessitam de copiar os respectivos DLLs para o directório da aplicação. Quando adicionas um DLL ao projecto e fazes uma referência no mesmo, tem lá uma opção que diz "Copy Local" (acho eu, não me lembro agora) que se calhar está a falso. Isto significa que ao testares o teu programa, tu não vais ter problemas porque o Visual Studio sabe onde procurar as referências. Mas noutros computadores não funciona assim. Se definires essa opção para verdadeiro, quando compilares o programa (seja para debug ou release), o DLL será copiado para o respectivo directório. Após isto, só te resta copiar a pasta debug ou release para outra máquina que o programa é suposto funcionar sem qualquer problema.
Se mesmo assim não está a funcionar é porque das duas uma... Ou fizeste alguma coisa mal, ou está-te a escapar alguma coisa no uso dessa biblioteca e sem saberes o quê, nós também não sabemos ajudar. Mas dou-te um exemplo da biblioteca que eu uso, Krypton Toolkit. Esta biblioteca tem um único ficheiro DLL e este ficheiro precisa de estar na mesma directoria que o executável (não significa que seja a única solução) do meu respectivo programa para correr noutras máquinas que não a minha.
Sem dares mais detalhes do teu programa, das bibliotecas que usas, que ficheiros DLL é que elas têm, como estás a referencia-los, para onde os copias-te/instalaste, etc... Não te sei ajudar melhor.
A frase, "Usar um Setup por usar é completamente irrelevante" é simplesmente ridícula e do mais incorrecto e errado que pode haver... denota um total desconhecimento do funcionamento do windows...
As DLL, por defeito, NÃO devem ser copiadas para a pasta da aplicação, as DLL DEVEM ser instaladas SEMPRE na pasta Windows/System32 (claro que nem todas as aplicações fazem isto, mas esta é que é a forma correcta -best practice- de o fazer).
SEMPRE que uma biblioteca é adicionada ao repositório, esta deve ser DECLARADA, ou seja, deverá indicar ao SO que existe e que está lá (forma leiga de explicar a coisa, claro que é um pouquinho mais complexa).
O Nazgulled tem razão. A melhor prática é copiar as DLLs para a pasta do programa. As DLLs NÃO DEVEM ser instaladas na pasta Windows/System32. Além de isso precisar de permissões de administrador é a maneira mais rápida para obter o famoso DLL hell.
No .NET podes instalar as DLLs com a GAC, mas o mais simples é mesmo copiar a DLL na pasta do programa. Também existe um mecanismo desde o Windows XP chamado SxS que serve como repositório global para DLLs.
O método do regsvr32 é mais utilizado para controlos ActiveX, COM, e DLLs globais ao sistema.
Sem comentários Einstein... E daí até vou fazer um comentário: és um membro demasiado recente que ainda não teve a oportunidade de conhecer a malta que já cá anda à mais tempo para ter uma noção dos conhecimentos de cada um, essa tua atitude só denota bastante arrogância da tua parte.
Não me vou estender muito porque o Triton já respondeu demasiado bem... Parece que quem denota uma grande falta de conhecimento do Windows e que deve ter cuidado com o que escreve não sou eu.
E como eu gosto de ser ridículo, incorrecto e de estar errado, vou frisar bem que, USAR UM SETUP NESTA SITUAÇÃO PARA RESOLVER A SITUAÇÃO DO UTILIZADOR SION É COMPLETAMENTE IRRELEVANTE.
Este parágrafo revela um desconhecimento grave do funcionamento da Framework .NET, principalmente para alguém que faz afirmações tão peremptórias.
Ainda assim, tens razão ao afirmar que essas bibliotecas irão necessitar de algum tipo de licenciamento para funcionarem em pleno.
Depois eu faço um software que tem uma dll chamada Tools.dll e tu fazes outro com uma dll com o mesmo nome... e depois o que é que acontece? Pois...
Isso depende do tipo de DLL que utilizas..
Tens de ter em atenção se é:
DLL Wrapper;
DLL .NET;
DLL COM;
Isto porque no caso das DLL Wrapper e .NET, normalmente funcionam na mesma directoria do executável a diferença é que as Wrapper funcionam tanto na directoria do executável como em System32. E não necessitam de ser registadas..
No caso das DLL COM ou ActiveX devem ser instaladas na directoria do sistema e também registadas..
Não divaguem que só complicam... É essa a grande razão de 90% das discussões na net.
A dúvida é relativamente a uma biblioteca "como o RadControls ou o Infraegistics", resumam-se a isso. O resto não interessa para esta situação. E para este tipo de situações, para este tipo de bibliotecas, o ideal é ter o .dll na mesma pasta que o executável.
...Quando adicionas um DLL ao projecto e fazes uma referência no mesmo, tem lá uma opção que diz "Copy Local"....
Está parte que o Nazgulled referiu, também é importante e facilita as coisas ..
Clicas em "Show All Files" em "Solution Explorer", de seguida "References" seleccionas a DLL em questão, depois verifica a parte das "Properties" que encontras a opção "Copy Local"
(Apesar de reponder já tarde)
Têm toda a razão, a propriedade do COPY LOCAL resolveu o problema, e corre em qualquer máquina, pelo menos até agora.