更改常量值时如何避免重新编译程序集? (C#)

How to avoid recompiling assemblies when changing constant values? (C#)

我正在尝试想办法让静态 class 具有常量字符串,当此 class 的值发生变化时不会强制重新编译。

我在这篇 highly voted comment 中读到:

... if you change a (const) value you must also recompile all assemblies dependent on your assembly defining the constants - therefore its often safer to go the readonly route.

所以我做了一个简短的实验来验证它是否属实。

我有 4 个项目:ProgramProjectAProjectBProjectC。每个“ProjectX”都有一个 class“X”,而程序存储 main.

在 C 中我有一个 public const string someString = "some const string",它被 B 中的 public 方法引用,而 B 中又被 public 方法引用16=],A的方法被Program.Main调用。

我是否使 someString 成为 conststatic readonly、getter 仅表达 属性 或仅 getter 属性 使用 属性 初始化程序,无论如何都会重建所有项目

我真的可以拥有一个 static class 来保存只读字符串值,一旦它的值发生变化就不会将重新编译传播到所有依赖项目?

这里有两个不同的问题:

const 表示被视为编译时文字的值。 IE。每次使用它时,编译器都会在使用它的地方插入实际的文字值。如果您动态加载 dll,或使用不同于编译时所针对的 dll 版本,这可能是一个问题。详细了解 const vs static readonly

您描述的问题是构建依赖系统。 IE。在进行增量构建时,它将重建所有修改过的项目以及依赖于将要重建的项目的所有项目。此行为与 const vs static readonly 无关。在代码文件中插入 space 足以使项目被视为已修改。

如果您只有四个项目,那么接受它可能是最简单的方法。如果这实际上是一个问题,您可以将这些值移动到配置文件中,这样就可以在不重新编译任何东西的情况下更改它们。