我想在编译时指定一个嵌入到我的程序集中的值。本质上,我想要定义一个 C 预处理器定义,然后我可以在我的代码中使用它并在运行时引用它。我知道你不能在.NET 中完全做到这一点,所以我试图弄清楚我的下一个最佳选择是什么。
编辑:添加一个示例以希望使我的目标更加清晰。我想将一些时间戳和作者信息嵌入到编译的程序集中。因此,当我将我的可执行文件复制到另一台机器上时,我可以准确地知道它是何时构建的以及由谁构建的(例如,在 about 框中)。
不完全清楚你想要什么,但也许你需要根据环境/命令行参数生成一些常量值?
一种选择(它使您也可以使用 C 预处理器自爆):在构建时生成 .CS 文件并进行编译。您可以在“构建前”步骤轻松完成,只需将生成的文件添加到项目中即可。
以下是在构建时生成一些文件的基本步骤。有一些 CMD 文件在项目文件夹中创建 CS:
:----- generate.cmd {file.Name} - generates some CS:
echo class Generated { public const int Value=42;} >%1
添加到构建步骤之前(解决方案->属性->构建事件
$(ProjectDir)generate.cmd $(ProjectDir)Generated.cs
将“Generated.cs”(上面的步骤将在项目根目录中)添加到您的项目中。
比Generated.Value
根据需要使用。
这种方法的更好实现是在项目文件 (.csproj) 中定义自定义属性并在运行构建时设置它(请参阅MSBuild的“/property:name=value”参数)。比直接实现您在项目中需要的东西(您可以使用 WriteLinesToFile 任务在 .csproj 中生成文件)或将属性传递给外部工具。
您可以像这样声明常量字段,然后您可以像访问任何其他字段一样访问:
private const string c_String = "FooFooFoo!";