Pergunta

Durante uma instalação do processo de criação, eu estou planejando fazer o seguinte (dentro de um C# Script):

  1. Leia o AssemblyVersion e AssemblyFileVersion valores de atributo de uma DLL.
  2. Iterar todas as DLLs e arquivos executáveis no projeto e aplicá-las a versão para o seu AssemblyVersion e AssemblyFileVersion 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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top