2010-11-23 7 views
0

Je veux avoir un numéro de build « câblé » (compilation constante de temps) dans une classe, par exemple:numéro de build dans le fichier C#

public class Domain 
{ 
    public string Build { get { return "CONST-BUILD-VERSION-HERE"; } } 

    ... 
} 

Comment puis-je y arriver?

+0

Je pense que nous avons besoin de plus d'informations ici, je ne suis pas sûr de ce que vous essayez de faire. – Noldorin

+0

Ne le feriez-vous pas comme vous l'avez posté? – Brad

+0

plus d'informations nécessaires – TalentTuner

Répondre

3

Avez-vous regardé pour obtenir les données sur le AssemblyInfo.cs?

+0

Ce serait la façon dont je voudrais aller –

+1

Ajouter ce lien ... Les résultats de recherche Google sont ennuyeux ... http: //www.msbuildextensionpack.com/help/3.5.4.0/html/d6c3b5e8-00d4-c826-1a73- 3cfe637f3827.htm –

+0

Si je comprends bien, ce qu'il veut, c'est obtenir les données _into_ 'AssemblyInfo.cs'. – Jon

1

Vous pouvez utiliser la version intégrée au AssemblyInfo.cs. Toute classe de l'assembly aura la même version car ils sont tous construits ensemble.

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 
+0

Je ne veux pas utiliser la réflexion. Doit être une constante de compilation dans le fichier CS. –

+0

Avoir une étape de pré-construction qui génère le code dont vous avez besoin, incrémenter ce qui est actuellement dans le fichier à la prochaine valeur que vous souhaitez utiliser. Fragile, mais automatisé. Voir la réponse de Jon pour l'idée générale. –

+0

@Bent: Y at-il une raison pour laquelle * doit * être une constante de compilation?La réflexion n'est pas aussi lente que les gens le décrivent - et comme il s'agit d'une * constante *, vous n'avez vraiment besoin de calculer le nombre de build qu'une seule fois et de stocker la valeur, ce qui signifie que le surcoût sera 0. –

2

Cela devrait être fait comme une étape de pré-construction.

À un certain moment dans le passé, j'ai conçu ce fichier batch pour faire l'affaire pour un projet C++:

@echo off 
SETLOCAL 
SET CPP_BUILD_AUTOINC_CONST= 
SET CPP_BUILD_AUTOINC_BUILD= 
SET CPP_BUILD_AUTOINC_FNAME= 
SET CPP_BUILD_AUTOINC_FILE=build_autoinc.conf 
IF NOT "%1"=="" SET CPP_BUILD_AUTOINC_FILE=%1 
IF NOT EXIST "%CPP_BUILD_AUTOINC_FILE%" GOTO noversionfile 

:configfromfile 
FOR /F "tokens=1,2 delims== " %%i IN (%CPP_BUILD_AUTOINC_FILE%) DO SET %%i=%%j 

if "%CPP_BUILD_AUTOINC_CONST%"=="" goto noconstname 
if "%CPP_BUILD_AUTOINC_BUILD%"=="" goto nobuildnum 
if "%CPP_BUILD_AUTOINC_FNAME%"=="" goto nofilename 

echo Auto-incrementing build number in %CPP_BUILD_AUTOINC_FNAME%... 
SET /A CPP_BUILD_AUTOINC_BUILD = %CPP_BUILD_AUTOINC_BUILD% + 1 
>%CPP_BUILD_AUTOINC_FILE% echo CPP_BUILD_AUTOINC_CONST=%CPP_BUILD_AUTOINC_CONST% 
>>%CPP_BUILD_AUTOINC_FILE% echo CPP_BUILD_AUTOINC_BUILD=%CPP_BUILD_AUTOINC_BUILD% 
>>%CPP_BUILD_AUTOINC_FILE% echo CPP_BUILD_AUTOINC_FNAME=%CPP_BUILD_AUTOINC_FNAME% 
>%CPP_BUILD_AUTOINC_FNAME% echo #define %CPP_BUILD_AUTOINC_CONST% %CPP_BUILD_AUTOINC_BUILD% 
goto end 

:noconstname 
:nobuildnum 
echo CPP_BUILD_AUTOINC : error 
exit /b 2 

:noversionfile 
echo CPP_BUILD_AUTOINC : error: version file %CPP_BUILD_AUTOINC_FILE% does not exist 
exit /b 1 

:end 
exit /b 0 

L'idée est:

Vous disposez d'un fichier (build_autoinc.conf) dans votre sources. Ce fichier contient la configuration de l'application spécifique (de sorte que le fichier de commandes puisse être réutilisé sans modifications).

build_autoinc.conf ressemble à ceci:

CPP_BUILD_AUTOINC_CONST=VERSION 
CPP_BUILD_AUTOINC_BUILD=1 
CPP_BUILD_AUTOINC_FNAME=version.cpp 

Ainsi, lorsque le fichier de commandes est exécuté, il crée (écrasements) le fichier version.cpp avec le contenu:

#define VERSION 1 

et incrémente également le numéro de build dans build_autoinc.conf.

Vous pouvez facilement adapter ceci pour travailler avec un projet C# et définir une étape de préconfiguration pour exécuter le fichier de commandes. Un mot d'avertissement, cependant: puisque version.cpp (ou votre équivalent) est écrasé avant chaque construction, le système de construction pensera TOUJOURS que puisque les fichiers ont changé, une nouvelle construction doit être faite. Vous ne pouvez donc pas, par exemple, cliquer sur "build" pour vérifier si votre binaire est à jour et ignorer le processus de construction s'il l'est.

+0

Cela semble le plus proche de ce que l'OP veut faire, afai peut voir . –

Questions connexes