Quais são as vantagens de usar assemblies com nomes fortes?
Quais são as coisas que não podem ser feitas com uma montagem normal?
Quais são as vantagens de usar assemblies com nomes fortes?
Quais são as coisas que não podem ser feitas com uma montagem normal?
Respostas:
Deixe-me listar os benefícios de nomear fortemente sua montagem primeiro:
A nomenclatura forte de seu assembly permite que você inclua seu assembly no Global Assembly Cache (GAC). Assim, permite que você compartilhe entre vários aplicativos.
A nomenclatura forte garante um nome exclusivo para esse assembly. Assim, ninguém mais pode usar o mesmo nome de montagem.
O nome forte protege a linhagem da versão de um assembly. Um nome forte pode garantir que ninguém seja capaz de produzir uma versão subsequente de seu assembly. Os usuários do aplicativo têm a garantia de que uma versão do assembly que estão carregando vem do mesmo editor que criou a versão com a qual o aplicativo foi construído.
Mais informações sobre nomes fortes da Microsoft estão em Strong-Named Assemblies ( MSDN ).
Quais são as coisas que não podem ser feitas com uma montagem normal?
Como todas as discussões que começaram com o surgimento de Nuget sugeriram livrar-se completamente de conjuntos com nomes fortes, minha empresa tentou isso e encontrou uma mudança significativa de comportamento quando se trata de configurações de aplicativos:
Se você usar o aplicativo automático ou as configurações do aplicativo com escopo do usuário fornecidas pelo VisualStudio (herdando System.Configuration.ApplicationSettingsBase), um EXE com nome forte criará exatamente 1 diretório dentro de% LOCALAPPDATA% chamado, por exemplo, "YourApplication.exe_StrongName_kjsdfzsuzdfiuzgpoisdiufzsdouif", não importa onde o EXE está localizado.
Mas sem o nome forte, o local (= caminho) do EXE será usado para criar um valor de hash que já difere entre DEBUG e RELEASE build, criando muitos diretórios dentro de% LOCALAPPDATA% nomeados como "YourApplication.exe_Url_dfg8778d6fs7g6d7f8g69sdf". Isso o torna inutilizável para implantações ClickOnce, onde o diretório de instalação muda a cada atualização.
Gostaria de acrescentar que, sem um nome forte, você não pode usar redirecionamentos de vinculação em arquivos de configuração.
Isso não vai funcionar:
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="null" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Você precisa ter um token de chave pública
<dependentAssembly>
<assemblyIdentity name="MyAssembly.MyComponent" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
Apenas um exemplo: gostaria de dar uma resposta dando mais ênfase na segurança . No caso de criarmos assemblies com um código-fonte que não queremos ser reutilizado por terceiros, mas queremos que seja testável, podemos assinar fortemente um assembly e tornar os internos visíveis apenas para os assemblies com o mesma assinatura.