Pergunta

Stack Overflow tem um número de versão do Subversion na parte inferior:

revisão svn:679

Quero usar esse controle de versão automático com meu .NET Web Site/Application, Windows Forms, projetos/soluções WPD.

Como faço para implementar isso?

Foi útil?

Solução

Parece que Jeff está usando CruiseControl.NET com base em algumas folheações nas transcrições do podcast.Parece ter recursos de implantação automatizados, desde o controle de origem até a produção.Pode ser aqui que a inserção está acontecendo?

Outras dicas

Fazemos isso com xUnit.net para nossas compilações automatizadas.Nós usamos CruiseControl.net (e estão testando o TeamCity).A tarefa MSBuild que executamos para integração contínua altera automaticamente o número da compilação para nós, de modo que o arquivo ZIP da compilação resultante contém um conjunto de DLLs e EXEs com versão adequada.

Nosso Arquivo MSBuild contém uma referência UsingTask para uma DLL que faz substituições de expressões regulares:(você pode usar esta DLL, pois ela também é coberta pela licença MS-PL)

  <UsingTask
     AssemblyFile="3rdParty\CodePlex.MSBuildTasks.dll"
     TaskName="CodePlex.MSBuildTasks.RegexReplace"/>

A seguir, extraímos o número da compilação, que é fornecido automaticamente pelo sistema CI.Você também pode fazer com que seu provedor de controle de origem forneça o número de revisão da fonte, se desejar, mas descobrimos que o número da compilação no sistema de CI era mais útil, porque não apenas é possível ver os resultados da integração pelo número de compilação do CI, mas também fornece um link de volta para o(s) conjunto(s) de alterações que foram incluídos na compilação.

 <!-- Cascading attempts to find a build number -->

 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(BUILD_NUMBER)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>$(ccnetlabel)</BuildNumber>
 </PropertyGroup>
 <PropertyGroup Condition="'$(BuildNumber)' == ''">
   <BuildNumber>0</BuildNumber>
 </PropertyGroup>

(Tentamos BUILD_NUMBER, que é do TeamCity, depois ccnetlabel, que é do CC.net, e se nenhum estiver presente, o padrão é 0, para que possamos testar o script de construção automatizado manualmente.)

A seguir, temos uma tarefa que define o número da compilação em um arquivo GlobalAssemblyInfo.cs que vinculamos a todos os nossos projetos:

 <Target Name="SetVersionNumber">
   <RegexReplace
       Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)'
       Replacement='AssemblyVersion("$1.$(BuildNumber)")'
       Files='GlobalAssemblyInfo.cs'/>
   <Exec Command="attrib -r xunit.installer\App.manifest"/>
 </Target>

Isso localiza o atributo AssemblyVersion e substitui o número da versão a.b.c.d por a.b.c.BuildNumber.Normalmente deixaremos a fonte verificada na árvore com as três primeiras partes do número do construtor fixas e a quarta em zero (por exemplo, hoje é 1.0.2.0).

Em seu processo de build, certifique-se de que a tarefa SetVersionNumber precede sua tarefa de build.No final, usamos nossa tarefa Zip para compactar os resultados da construção para que tenhamos um histórico dos binários para cada construção automatizada.

Você pode fazer isso adicionando o seguinte em qualquer lugar do seu código

$Id:$

Então, por exemplo, @Jeff fez:

<div id="svnrevision">svn revision: $Id:$</div>

e quando verificado no servidor substituiu $Id:$ pelo número da revisão atual.eu também encontrei esta referência.

Há também $Data:$, $Rev:$, $Revisão:$

Se você estiver usando ASP.Net MVC (como faz o StackOverflow), escrevi um guia fácil de seguir de 3 etapas sobre como obter e exibir automaticamente a revisão mais recente do SVN.O guia foi inspirado pensando comigo mesmo sobre essa mesma questão!:o)

@Ballon Se você estiver usando o TortoiseVN, você pode usar o embalado SubWCRev programa.Ele consulta uma cópia de trabalho e informa apenas o número de revisão mais alto.É certo que esta parece ser uma abordagem do lado do cliente para um problema do lado do servidor, mas como é um bom programa de linha de comando, você deve ser capaz de capturar sua saída para uso com bastante facilidade.

$rev e outros semelhantes são revisões de arquivos individuais, portanto, eles não serão alterados a menos que o arquivo seja alterado.O número na página da web é (provavelmente, estou assumindo aqui) o número de revisão do svn para todo o projeto.Isso é diferente das revisões de arquivo, que outros têm apontado.

Neste caso presumo que a CCNET está extraindo o número de revisão do projeto e reescrevendo uma parte da página com esse número.Qualquer solução de CI deve ser capaz de fazer isso, configure-o sozinho com CCNET e Teamcity (embora não sejam páginas da web, mas controle de versão automático de versões de implantação/montagem).

Para fazer isso, use uma solução de CI que suporte isso ou use seu processo de construção (MSbuild/Nant) para armazenar essa versão e gravá-la nos arquivos antes de "implantá-la".

Para adicionar à resposta de @BradWilson: "Você também pode solicitar ao seu provedor de controle de origem que forneça o número de revisão da origem, se desejar"

Para conectar o Subversion e o MSBuild:Projeto de tarefas da comunidade MSBuild

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