Pergunta

Existe alguma maneira de incluir o número de revisão do repositório SVN na string de versão de um assembly .NET?Algo como Major.Minor.SVNRev

Já vi menção de fazer isso com algo como CC.NET (embora na verdade no ASP.NET), mas existe alguma maneira de fazer isso sem nenhum software extra?Eu fiz coisas semelhantes em C/C++ antes de usar scripts em lote de construção, mas isso foi feito lendo o número da versão e fazendo com que o script escrevesse um arquivo chamado "ver.h" sempre com algo no sentido de:

#define MAJORVER 4
#define MINORVER 23
#define SOURCEVER 965

Usaríamos então essas definições para gerar a string da versão.

Algo assim é possível para .NET?

Foi útil?

Solução

Tenha um olhar em SubWCRev - http://tortoisesvn.net/docs/ LANÇAMENTO / TortoiseSVN_en / tsvn-subwcrev.html

Os números de versão de montagem são geralmente em assemblyinfo.cs

Outras dicas

Aqui está e C # exemplo para atualizar as informações de revisão na montagem automaticamente. Baseia-se a resposta por Will Dean, que não é muito elaborado.

Exemplo:

  1. Copiar AssemblyInfo.cs para AssemblyInfoTemplate.cs no projeto pasta Propriedades .
  2. Altere o Build Action e Nenhum para AssemblyInfoTemplate.cs.
  3. Modificar a linha com o AssemblyFileVersion a:

    [assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

  4. Considere a adição de:

    [assembly: AssemblyInformationalVersion("Build date: $WCNOW=%Y-%m-%d %H:%M:%S$; Revision date: $WCDATE=%Y-%m-%d %H:%M:%S$; Revision(s) in working copy: $WCRANGE$$WCMODS?; WARNING working copy had uncommitted modifications:$.")],

    que lhe dará detalhes sobre a situação da revisão da fonte a montagem foi construída a partir de.

  5. Adicione o seguinte evento de pré-compilação para as propriedades do arquivo do projeto:

    subwcrev "$(SolutionDir)." "$(ProjectDir)Properties\AssemblyInfoTemplate.cs" "$(ProjectDir)Properties\AssemblyInfo.cs" -f

  6. Considere a adição de AssemblyInfo.cs para o svn lista de ignorados. números de revisão substituídos e datas vai modificar o arquivo, o que resulta em mudanças e revisões insignificantes e $ WCMODS $ avaliará a verdade. AssemblyInfo.cs deve, naturalmente, ser incluído no projeto.

Em resposta às objeções por Wim Coenen, notei que, ao contrário do que foi sugerido por Darryl, o AssemblyFileVersion também faz não números de suporte acima de 2 ^ 16. A construção será concluída, mas a propriedade arquivo Versão na montagem real será AssemblyFileVersion módulo 65536. Assim, 1.0.0.65536 bem como 1.0.0.131072 renderá 1.0.0.0, etc. Neste exemplo, há sempre o número de revisão verdadeira na propriedade AssemblyInformationalVersion. Você poderia deixar de fora a etapa 3, se você considerar esse um problema significativo.

Edit:. Alguma informação adicional, depois de ter utilizado esta solução por um tempo

  1. É agora usar AssemblyInfo.cst em vez de AssemblyInfoTemplate.cs, porque terá automaticamente Build Action opção Nenhum , e ele não vai encher-lhe lista de erros, mas você vai perder destaque de sintaxe.
  2. Eu adicionei dois testes para meus arquivos AssemblyInfo.cst:

    #if(!DEBUG)    
        $WCMODS?#error Working copy has uncommitted modifications, please commit all modifications before creating a release build.:$ 
    #endif 
    #if(!DEBUG)       
        $WCMIXED?#error Working copy has multiple revisions, please update to the latest revision before creating a release build.:$ 
    #endif
    

    Usando este, normalmente você vai ter que executar um SVN atualização completa, após um commit e antes que você pode fazer uma compilação de lançamento bem sucedido. Caso contrário, $ WCMIXED será verdade. Este parece ser causado pelo fato de que os arquivos submetidos novamente a revisão cabeça após a confirmação, mas outros arquivos não.

  3. Eu tive algumas dúvidas se o primeiro parâmetro para SubWCRev, "$ (SolutionDir)", que define o escopo de verificação svn info versão, sempre funciona como desejado. Talvez, ele deve ser de US $ (ProjectDir), se você está satisfeito se cada conjunto indivíduo está em uma revisão consistente.

Adição Para responder o comentário de @tommylux.

SubWCRev pode ser usado para qualquer arquivo no seu projeto. Se você deseja exibir informações de revisão em uma página da web, você pode usar este modelo VersionInfo:

public class VersionInfo
{       
    public const int RevisionNumber = $WCREV$;
    public const string BuildDate = "$WCNOW=%Y-%m-%d %H:%M:%S$";
    public const string RevisionDate = "$WCDATE=%Y-%m-%d %H:%M:%S$";
    public const string RevisionsInWorkingCopy = "$WCRANGE$";
    public const bool UncommitedModification = $WCMODS?true:false$;
}

Adicionar um evento de pré-compilação assim como o um para AssemblyInfo.cst e você terá fácil acesso a todas as informações SubVersion relevante.

É possível, mas você não deve: os componentes da cadeia de versão de montagem são limitadas a números de 16 bits (no máximo 65.535). números de revisão do Subversion pode facilmente tornar-se maior do que isso para que em algum momento o compilador é subitamente indo para reclamar.

Read / roçar esses documentos:

acessar o repositório Subversion do .NET usando DotSVN

Como: escrever uma Task

versão Inserir SVN e número de compilação no seu arquivo C # AssemblyInfo

Compilando Aplicativos Com personalizado para o Microsoft Desenvolver Motor

Os MSBuildCommunityTasks svnversion mencionado na terceira referência não iria realizar com svn em Mac 10.5.6 e VS2008 C # compilação de projeto dentro Parallels hospedagem Vista (ie., Em frente OS).

Escreva a sua própria tarefa para recuperar a revisão do repositório utilizando DotSVN:

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
using DotSVN.Common;
using DotSVN.Common.Entities;
using DotSVN.Common.Util;
using DotSVN.Server.RepositoryAccess;

namespace GetSVNVersion
{
    public class GetRevision : Task
    {
        [Required]
        public string Repository { get; set; }
        [Output]
        public string Revision { get; set; }

        public override bool Execute()
        {
            ISVNRepository repo;
            bool connected = true;
            try
            {
                repo = SVNRepositoryFactory.Create(new SVNURL(Repository));
                repo.OpenRepository();
                Revision = repo.GetLatestRevision().ToString();
                Log.LogCommandLine(Repository + " is revision " + Revision);
                repo.CloseRepository();
            }
            catch(Exception e)
            {
                Log.LogError("Error retrieving revision number for " + Repository + ": " + e.Message);
                connected = false;
            }
            return connected;
        }
    }
}

Desta forma, permite que o caminho do repositório para ser "file: /// Y: / repo", onde Y:. É um diretório Mac mapeados em Vista

Outra resposta mencionou que o número de revisão do SVN pode não ser uma boa idéia por causa do limite do tamanho do número.

O link a seguir fornece não só um número de revisão SNV, mas também uma informação do molde versão data.

Adicionando este para um projeto .NET é simples -. Muito pouco necessidades trabalho a ser feito

Aqui é um projeto github que aborda esse https://github.com/AndrewFreemantle/When-The-Version/downloads

A seguir url pode carregar lentamente, mas é uma explicação passo-a-passo de como fazer este trabalho (fáceis e curtas 3 ou 4 passos)

http://www.fatlemon.co.uk/2011/11/wtv-automatic-date-based-version-numbering-for-net-with-whentheversion/

info svn, diz-lhe a versão que você está, você pode fazer um evento "pré-compilação" no VS em seu projeto para gerar os assemblyinfo.cs executando svn info e analisar seus resultados com um aplicativo de linha de comando cultivado em casa .

Eu tenho feito isso antes, mas rapidamente mudou para apenas ter ccnet passá-lo como uma variável para nant.

Se você quiser atualizar o número da versão em uma projectos AssemblyInfo.cs você pode estar interessado neste artigo:

CodeProject: números Use Subversion revisão em seus projetos de Visual Studio

Se você ativar SVN Palavras-chave, em seguida, cada vez que você check-in o Subversion projeto verifica seus arquivos para certas "palavras-chave" e substitui as palavras-chave com algumas informações.

Por exemplo, No topo dos meus arquivos de origem Gostaria de criar um cabeçalho conter as seguintes palavras-chave:

'$ Author: $
'$ Id: $
'$ Rev: $

Quando eu verificar este arquivo no Subversion essas palavras-chave são substituídos pelo seguinte:

'$ Author: paulbetteridge $
'$ Id: myfile.vb 145 2008-07-16 15: 24: 29Z paulbetteridge $
'$ Rev: 145 $

Você pode usar um arquivo de montagem Versão compartilhada que você pode fazer referência em todos os seus projetos.

uppercut faz isso - http://ferventcoder.com/archive/2009/05/21/uppercut---automated-builds-- -versionbuilder.aspx

Isto lhe dará uma idéia do que você pode fazer para obter versões em suas montagens.

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