2010-11-23 10 views
0

ich eine Build-Nummer „fest verdrahtet“ haben will (kompilieren-Zeitkonstante) in eine Klasse, zum Beispiel:Build-Nummer in C# Datei

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

    ... 
} 

Wie kann ich das erreichen?

+0

Ich denke, wir brauchen mehr Informationen hier, ich bin mir nicht sicher, was Sie versuchen zu tun. – Noldorin

+0

Würdest du es nicht genauso machen, wie du es geschrieben hast? – Brad

+0

mehr Infos benötigt – TalentTuner

Antwort

3

Haben Sie die Daten aus der AssemblyInfo.cs abgerufen?

+0

Das wäre die Art, wie ich gehen würde –

+1

Fügen Sie diesen Link ... Google-Suchergebnisse sind nervig ... http: //www.msbuildextensionpack.com/help/3.5.4.0/html/d6c3b5e8-00d4-c826-1a73- 3cfe637f3827.htm –

+0

So wie ich es verstehe, will er die Daten _into_ 'AssemblyInfo.cs' bekommen. – Jon

1

Sie können die integrierte Version unter AssemblyInfo.cs verwenden. Jede Klasse in der Assembly wird dieselbe Version haben, da sie alle zusammen erstellt werden.

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

Ich möchte keine Reflektion verwenden. Muss eine Kompilierzeitkonstante in der CS-Datei sein. –

+0

Erstelle einen Prebuild-Schritt, der den benötigten Code generiert, indem du den aktuellen Wert der Datei auf den nächsten Wert erhöhst, den du verwenden möchtest. Spröde, aber automatisiert. Siehe @ Jon's Antwort für die allgemeine Idee. –

+0

@Bent: Gibt es einen Grund, warum * eine * Kompilierzeitkonstante sein muss?Die Reflexion ist nicht so langsam, wie die Leute es ausmachen - und da dies eine * Konstante * ist, müssen Sie die Build-Nummer nur einmal berechnen und den Wert speichern, was bedeutet, dass der Overhead 0 ist. –

2

Dies würde als Pre-Build-Schritt getan werden müssen.

An einem gewissen Punkt in der Vergangenheit habe ich diese Batchdatei entwickelt, den Trick für ein C++ Projekt zu tun:

@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 

Die Idee ist:

Sie haben eine Datei (build_autoinc.conf) in Ihrem Quellen. Diese Datei enthält die Konfiguration für die spezifische Anwendung (so dass die Batchdatei ohne Änderungen wiederverwendet werden kann).

build_autoinc.conf sieht wie folgt aus:

#define VERSION 1 

und auch erhöht die Build-Nummer in:

CPP_BUILD_AUTOINC_CONST=VERSION 
CPP_BUILD_AUTOINC_BUILD=1 
CPP_BUILD_AUTOINC_FNAME=version.cpp 

Also, wenn die Batch-Datei ausgeführt wird, es (Überschreibungen) die Datei version.cpp mit dem Inhalt erstellt build_autoinc.conf.

Sie können dies problemlos anpassen, um mit einem C# -Projekt zu arbeiten, und einen Vorbereitungsschritt zum Ausführen der Stapeldatei festlegen. Ein Wort der Warnung: Da version.cpp (oder Ihr Gegenstück) vor jedem Build überschrieben wird, wird das Build-System IMMER denken, dass, da sich die Dateien geändert haben, ein neuer Build erstellt werden muss. Sie können also zum Beispiel nicht auf "build" klicken, um nur zu überprüfen, ob Ihre Binärdatei aktuell ist, und den Build-Prozess überspringen, wenn dies der Fall ist.

+0

. Dies scheint am nächsten zu OP zu liegen, was afai sehen kann . –