Como especificar o local do arquivo de solução para arquivos de informações de assembly de controle de versão no MSBUILD
-
26-12-2019 - |
Pergunta
Estou mexendo nisso há um dia, mas sem sorte.O versionamento do assembly com MSBUILD funcionava antes, mas recentemente movemos os arquivos da solução para uma pasta separada dentro da raiz do projeto e, desde então, o versionamento não tem funcionado.
Abaixo está a estrutura do projeto
Pasta de código
-> Pasta ProjetoA
-> pasta ProjetoB
-> pasta ProjetoC
-> Pasta de soluções
*Anteriormente, os arquivos Solutions (.sln) estavam na pasta Code.
Quando executamos o MSBuild recebo o aviso abaixo.
Nenhum arquivo de informações de montagem foi fornecido
Abaixo está uma versão reduzida do log de construção.
Excluir espaço de trabalho
00:00 Excluir diretório de fontes
00:00 Criar espaço de trabalho
01:14 Obtenha espaço de trabalho
00:00 Versionamento de montagens
00:00 AssemblyVersion and AssemblyFileVersion Assembly Version Processando:Usando padrões de número de versão incluídos na definição de build
00:00 Defina todos os valores da propriedade Assembly (b) Assembléias de versão com os seguintes padrões:AssemblyVersion (1.0.0.0) e AssemblyFileVersion (AAA YYYY.MM.DD.B) Nenhum arquivo de informação de montagem foi fornecido
Abaixo está a tarefa do MSBuild que produz o log acima.
<local:VersionAssemblyInfoFiles
AssemblyFileVersionPattern="[AssemblyFileVersionPattern]"
AssemblyInfoFilePattern=" AssemblyInfoFilePattern]"
AssemblyVersionPattern="[AssemblyVersionPattern]"
BuildDirectory="[BuildDirectory]" BuildNumberPrefix="
[BuildNumberPrefix]" BuildSettings="[BuildSettings]"
DisplayName="Versioning Assemblies"
DoCheckinAssemblyInfoFiles="[DoCheckinAssemblyInfoFiles]"
ForceCreateVersion="[ForceCreateVersion]"
sap:VirtualizedContainerService.HintSize="200,22"
mva:VisualBasic.Settings="Assembly references and imported namespaces
serialized as XML namespaces" UseVersionSeedFile="[UseVersionSeedFile]"
VersionSeedFilePath="[VersionSeedFilePath]" Workspace="[Workspace]"
xmlns:local="clr-namespace:TfsBuild.Versioning.Activities;
assembly=TfsBuild.Versioning.Activities">
<sap:WorkflowViewStateService.ViewState>
<scg:Dictionary x:TypeArguments="x:String, x:Object">
<x:Boolean x:Key="ShouldCollapseAll">False</x:Boolean>
<x:Boolean x:Key="ShouldExpandAll">True</x:Boolean>
</scg:Dictionary>
</sap:WorkflowViewStateService.ViewState>
</local:VersionAssemblyInfoFiles>
Eu também olhei para a solução sugerida aqui mas não tive sorte.Alguém pode me indicar a direção certa?Não sou especialista em MSBuild.
Desde já, obrigado.
Solução
Acabei fazendo a seguinte solução alternativa.Não temos a opção de mover todas as soluções para o nível Raiz do projeto.
a.Crie uma nova solução, ou seja, SomeApp.lib.versioning.Sln Esta solução viveria sob a pasta raiz e é usada apenas para verificar o restante dos projetos.
b.O projeto (.csproj) para SomeApp.Lib.Versioning.sln ficaria no mesmo nível que o restante dos projetos.
Então a nova estrutura é
Pasta de código
-> Pasta ProjetoA
-> pasta ProjetoB
-> pasta ProjetoC
-> Pasta de soluções
-> SomeApp.Lib.Versioning.sln
-> Pasta SomeApp.Lib.Versioning
c.Agora faço referência ao SomeApp.Lib.Versioning.proj de uma das soluções na pasta Soluções.Isso significa que SomeApp.Lib.Versioning.proj tem duas soluções anexadas para acertar.
d.O projeto que exibe a versão de construção usaria o tipo, ou seja, arquivo de classe de SomeApp.Lib.Versioning.proj
De acordo com o versionamento de compilação padrão, SomeApp.Lib.Versioning.proj teria a versão de compilação correta (SomeApp.Lib.Versioning.sln está no nível raiz)
Observações:Esta é apenas uma solução alternativa e não uma solução ideal.Isso não criará versões de todos os assemblies do projeto.Por exemplo, se quisermos saber qual assembly foi construído em qual versão, isso não vai funcionar.É apenas um espaço reservado para obter a versão de construção da solução.