在编译时将字符串嵌入到.NET程序集中

时间:2013-01-30 16:49:34

标签: c# .net-2.0

我想在编译时指定嵌入在程序集中的值。基本上我想要的是定义一个C预处理器定义,然后我可以在我的代码中使用它并在运行时引用。我知道你不能在.NET中完全做到这一点,所以我想弄清楚我的下一个最佳选择是什么。

编辑:添加一个示例,希望能让我的目标更加清晰。我想在编译的程序集中嵌入一些时间戳和作者信息。因此,当我将我的可执行文件复制到另一台机器时,我可以准确地告诉它何时构建,以及由谁(例如,在一个关于框中)。

2 个答案:

答案 0 :(得分:4)

不完全清楚你想要什么,但也许你需要根据环境/命令行参数生成一些常量值?

一个选项(使您能够使用C预处理器自行拍摄脚本):在构建时生成.CS文件并进行编译。您可以在“构建前”步骤中轻松完成,只需将生成的文件添加到项目中即可。


以下是在构建时生成某个文件的基本步骤。有一些CMD文件在项目文件夹中创建CS:

:-----   generate.cmd {file.Name}  - generates some CS:
echo class Generated { public const int Value=42;} >%1

在构建步骤之前添加(solution-> properties-> Build events

$(ProjectDir)generate.cmd $(ProjectDir)Generated.cs

将“Generated.cs”(上面的步骤将在项目根目录中)添加到项目中。

根据需要使用Generated.Value


更好地实现此方法将是在项目文件(.csproj)中定义自定义属性,并在运行构建时设置它(请参阅MSBuild的“/ property:name = value”参数)。比在项目中直接实现你需要的东西(你可以用.csproj生成文件) WriteLinesToFile task)或将该权利转移到外部工具。

答案 1 :(得分:3)

您可以像这样声明常量字段,然后像任何其他字段一样进行访问:

private const string c_String = "FooFooFoo!";