Alterar programaticamente a AssemblyVersion e AssemblyFileVersion atributos
-
20-09-2019 - |
Pergunta
Durante uma instalação do processo de criação, eu estou planejando fazer o seguinte (dentro de um C# Script):
- Leia o
AssemblyVersion
eAssemblyFileVersion
valores de atributo de uma DLL. - Iterar todas as DLLs e arquivos executáveis no projeto e aplicá-las a versão para o seu
AssemblyVersion
eAssemblyFileVersion
valores de atributo.
A pergunta agora é: Como fazer o passo 2?
Eu com êxito pode fazer a etapa 1 para a etapa 2 não vejo um real ponto de partida.O que eu provavelmente tem a fazer é usar algum nativo P/Chamar métodos, pois os atributos diretamente modificar as informações de versão de recursos de informação de uma DLL/executável.
Qualquer dica sobre isso?
Solução
Por que você não, durante o processo de compilação, leia o AssemblyVersion
e AssemblyFileVersion
de uma DLL, e salvá-lo novamente para outro csproject do AssemblyInfo.cs
, só em seguida, compilá-lo?
Como uma questão de fato, eu não sei se é possível modificar o arquivo DLL diretamente, sem recorrer a algo fantasioso.
Ou, em alternativa, certifique-se de que todas as suas DLLs compartilhar comum AssemblyInfo.cs
.Você pode fazer isso adicionando a AssemblyInfo.cs
como "Adicionar Link" quando você adicionar um novo item em csproject.Desta forma, quando você faz uma compilação de todas as DLLs irão compartilhar o mesmo AssemblyInfo.cs
, e assim, a saída do mesmo AssemblyVersion
.
Outras dicas
No meu caso, eu criei um modelo de T4 para alterar o AssemblyVersion e AssemblyFileVersion.Liguei para o modelo de Montagem.tt, e fez dele um arquivo vinculado (quando você adicioná-lo a escolher Adicionar Link, em vez de Adicionar).Todas as minhas montagens puxe a ligado a Montagem.tt arquivo.
Em seguida, você pode executar o modelo T4 a partir de um local e ele irá atualizar todos os AssemblyVersion e AssemblyFileVersions.Você não tem que chamar o arquivo AssemblyInfo.cs para as informações a ser puxado para dentro de suas dlls.
O código para a Assembleia.tt arquivo é:
<#@ template language="C#" hostspecific="true" #>
//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//
using System.Reflection;
[assembly: AssemblyVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
[assembly: AssemblyFileVersion("4.<#= this.RevisionYear #>.<#= this.RevisionNumber #>.<#= this.RevisionTime #>")]
<#+
int RevisionYear = DateTime.UtcNow.Year;
int RevisionNumber = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year,1,1)).TotalDays;
int RevisionTime = (int)(DateTime.UtcNow - new DateTime(DateTime.UtcNow.Year, DateTime.UtcNow.Month, DateTime.UtcNow.Day)).TotalMinutes;
#>
A saída do modelo T4 acima será:
//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//
using System.Reflection;
[assembly: AssemblyVersion("4.2016.284.1066")]
[assembly: AssemblyFileVersion("4.2016.284.1066")]
Se você tiver acesso a fontes, tomar o conselhos de Graviton
Se não, você pode estar em apuros.Possivelmente você pode desmontar com o ILDASM e remontar com ILASM.Mas isto não funciona para assemblies de nome forte.