C#文件中的内部版本号

C#文件中的内部版本号,c#,build,version,C#,Build,Version,我希望将生成编号“硬连线”(编译时常量)放入类中,例如: public class Domain { public string Build { get { return "CONST-BUILD-VERSION-HERE"; } } ... } 我如何才能做到这一点?您是否考虑过从中获取数据?您是否考虑过从中获取数据?您可以在中使用内置版本。程序集中的任何类都将具有相同的版本,因为它们都是一起生成的 System.Reflection.Assembly.GetExecuti

我希望将生成编号“硬连线”(编译时常量)放入类中,例如:

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

    ...
}

我如何才能做到这一点?

您是否考虑过从中获取数据?

您是否考虑过从中获取数据?

您可以在中使用内置版本。程序集中的任何类都将具有相同的版本,因为它们都是一起生成的

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

您可以在中使用内置版本。程序集中的任何类都将具有相同的版本,因为它们都是一起生成的

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

可以使用反射从程序集信息中获取数据:

版本:


其他:

您可以使用反射从程序集信息中获取数据:

版本:


其他:

这必须作为预构建步骤来完成

过去的某个时候,我设计了这个批处理文件来完成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\u autoinc.conf
中增加内部版本号


您可以很容易地将其应用于C#项目,并设置预构建步骤来运行批处理文件。但是,有一点需要提醒:由于
version.cpp
(或您的等效版本)在每次生成之前都会被覆盖,因此生成系统将始终认为,由于文件已更改,因此必须进行新的生成。因此,例如,您不能点击“build”来检查二进制文件是否为当前文件,如果是,则跳过生成过程。

这必须作为预生成步骤来完成

过去的某个时候,我设计了这个批处理文件来完成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\u autoinc.conf
中增加内部版本号



您可以很容易地将其应用于C#项目,并设置预构建步骤来运行批处理文件。但是,有一点需要提醒:由于
version.cpp
(或您的等效版本)在每次生成之前都会被覆盖,因此生成系统将始终认为,由于文件已更改,因此必须进行新的生成。例如,你不能点击“build”来检查你的二进制文件是否是最新的,如果是最新的,就跳过构建过程。

我想我们需要更多信息,我不知道你想做什么。你不就按照你发布的那样做吗?编译项目的效果必须是“CONST-build VERSION-here”有一个新的值,并用新的常量编译成二进制文件。我想我们需要更多的信息,我不知道你想做什么。你不会像你发布的那样做吗?编译项目的效果一定是“CONST-BUILD VERSION-here”有一个新的值,并用新的常量编译成二进制文件。这就是我获取此链接的方式…谷歌搜索结果令人讨厌…据我所知,他想要的是将数据获取到
AssemblyInfo.cs
。这就是我获取此链接的方式…谷歌搜索结果令人讨厌…据我所知,他想要的是将数据放入
AssemblyInfo.cs
。不想使用反射。必须是CS文件中的编译时常量。具有生成所需代码的预构建步骤,将文件中当前的内容递增到希望使用的下一个值。易碎,但自动化。请参阅@Jon的答案以了解大致思路。@Bent:有没有理由它必须是编译时常量?反射并不像人们想象的那么慢——因为这将是一个常数,所以您只需要计算一次构建数并存储该值,这意味着开销将为0。@Bent:如果是为了能够从程序外部直接从可执行文件检索版本信息,这就是AssemblyInfo.cs和
FileVersionInfo
类不希望使用反射的内容。必须是CS文件中的编译时常量。具有生成所需代码的预构建步骤,将文件中当前的内容递增到希望使用的下一个值。易碎,但自动化。请参阅@Jon的答案以了解大致思路。@Bent:有没有理由它必须是编译时常量?反射并不像人们想象的那么慢——因为这将是一个常数,所以您只需要计算一次构建数并存储该值,这意味着开销将为0。@Bent:如果是为了能够从程序外部直接从可执行文件检索版本信息,这就是AssemblyInfo.cs和
FileVersionInfo
类的作用,因为这似乎最接近OP想要做的事情,afai可以看到。这似乎最接近OP想要做的事情,afai可以看到。