L'aggiornamento automatico e il check-in dei file AssemblyInfo.cs occasionalmente causano un errore parziale

StackOverflow https://stackoverflow.com/questions/174705

  •  05-07-2019
  •  | 
  •  

Domanda

Abbiamo impostato TFS 2008 per creare il checkout di tutti i file AssemblyInfo.cs nel progetto, aggiornarli con AssemblyInfoTask, quindi annullare il checkout o il check-in a seconda che la build sia passata o meno. Sfortunatamente, quando due build vengono messe in coda vicine, si ottiene una build parzialmente completata poiché i file AssemblyInfo.cs sembrano essere stati estratti in una versione precedente al check-in precedente.

Per ovviare a questo, ho pensato di poter usare il " Ottieni " attività per forzare i file AssemblyInfo.cs all'ultima versione prima di aggiornarli, ma questo sembra non avere alcun effetto. Qualche idea?

<Target Name="AfterGet" Condition="'$(IsDesktopBuild)'!='true'">
<Message Text="SolutionRoot = $(SolutionRoot)" />
<Message Text="OutDir = $(OutDir)" />
<!-- Set the AssemblyInfoFiles items dynamically -->
<CreateItem Include="$(SolutionRoot)\Main\Source\InputApplicationSln\**\$(AssemblyInfoSpec)">
  <Output ItemName="AssemblyInfoFiles" TaskParameter="Include" />
</CreateItem>

<Message Text="$(AssemblyInfoFiles)" />

<!-- When builds are queued up successively, it is possible for the next build to be set up before the AssemblyInfoSpec is checked in so we need to force 
    the latest these versions of these files to be got before a checkout -->
<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="$(RecursiveGet)" Force="$(ForceGet)" />

<Exec WorkingDirectory="$(SolutionRoot)\Main\Source\InputApplicationSln"
          Command="$(TF) checkout /recursive $(AssemblyInfoSpec)"/>

    

È stato utile?

Soluzione 2

Modifica:

<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="$(RecursiveGet)" Force="$(ForceGet)" />

A:

<Get Condition=" '$(SkipGet)'!='true' " TeamFoundationServerUrl="$(TeamFoundationServerUrl)" Workspace="$(WorkspaceName)" Filespec="$(AssemblyInfoSpec)"  Recursive="True" Force="True" />

Ha forzato la sovrascrittura dei file AssemblyInfo.cs con la parte superiore dell'albero. Ha funzionato finora, ma è più un trucco che qualcosa di elegante.

Altri suggerimenti

La tua build riscrive i file AssemblyInfo e quindi li controlla di nuovo? O modifichi semplicemente i file AssemblyInfo localmente. Personalmente preferisco il secondo approccio, come documentato sul sito delle ricette di TFSBuild:

http://tfsbuild.com/AssemblyVersioning%20.ashx

In realtà non mi sono mai seduto e controllato, ma mi chiedevo se hai controllato i file AssemblyInfo, quindi potrebbe accadere quanto segue che potrebbe causare i tuoi problemi ...

  1. Richiedi una build, changeset correnti = 42
  2. La build 1 per il changeset 42 inizia a funzionare
  3. Richiedi una build, changeset correnti = 42 (ancora)
  4. Build 2 per il changeset 42 in coda
  5. Crea 1 controlli in nuovi file assemblyinfo, corrente changeset = 43
  6. Completa la build 1
  7. Viene avviata la Build 2 per il changeset 42, quindi ottiene un changeset 42 che significa che i file AssemblyInfo sono quelli fold.

Come ho detto, non sono esattamente sicuro quando il numero di changeset è determinato per la build - al momento dell'accodamento o al momento dell'esecuzione. Avrebbe più senso che fosse al momento della fila.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top