Номер сборки в файле C # - PullRequest
0 голосов
/ 23 ноября 2010

Я хочу, чтобы в классе был номер сборки "hardwired" (постоянная времени компиляции), например:

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

    ...
}

Как мне это сделать?

Ответы [ 4 ]

3 голосов
/ 23 ноября 2010

Вы смотрели на получение данных из AssemblyInfo.cs ?

2 голосов
/ 23 ноября 2010

Это должно быть сделано в качестве шага перед сборкой.

В какой-то момент в прошлом я разработал этот командный файл, чтобы выполнить трюк для проекта 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

Идея такова:

У вас есть файл (build_autoinc.conf) в ваших источниках.Этот файл содержит конфигурацию для конкретного приложения (чтобы пакетный файл можно было повторно использовать без изменений).

build_autoinc.conf выглядит следующим образом:

CPP_BUILD_AUTOINC_CONST=VERSION
CPP_BUILD_AUTOINC_BUILD=1
CPP_BUILD_AUTOINC_FNAME=version.cpp

Таким образом, когда запускается пакетный файл, он создает (перезаписывает) файл version.cpp с содержимым:

#define VERSION 1

, а также увеличивает номер сборки в build_autoinc.conf.

. Вы можете адаптировать его для работы с C #довольно легко спроектировать и установить шаг предварительной сборки для запуска командного файла.Однако, предупреждающее слово: поскольку version.cpp (или ваш эквивалент) перезаписывается перед каждой сборкой, система сборки ВСЕГДА будет думать, что, поскольку файлы изменились, необходимо сделать новую сборку.Так что вы не можете, например, нажать «build», чтобы просто проверить, является ли ваш двоичный файл текущим, и пропустить процесс сборки, если он есть.

1 голос
/ 23 ноября 2010

Вы можете использовать встроенную версию в AssemblyInfo.cs . Любой класс в сборке будет иметь одинаковую версию, поскольку все они собираются вместе.

System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; 
0 голосов
/ 23 ноября 2010

Вы можете получить данные из информации о сборке, используя Reflection:

Версия: http://msdn.microsoft.com/en-us/library/system.reflection.assemblyversionattribute.aspx

Другие: http://msdn.microsoft.com/en-us/library/1h52t681.aspx

...