分发时只需要常量的 DLL 吗?
Is a DLL with only constants needed in distribution?
我创建了两个依赖于单个 class 库的可执行项目。
class库仅包含classes和常量(无变量或函数),用于存储两个可执行项目之间通信的应用程序级协议信息。
在测试我的两个程序时,我注意到它们 运行 不需要位于同一目录中的 class 库 (DLL)。
这里发生了什么?如果仅使用常量,是否需要分发 DLL?
如果它们是 真正的 常量,由 const
引入,那么每个常量的值将在使用它的地方内联。例如,如果您有:
// Assembly1
public static class Constants
{
public const string Foo = "Hello";
}
// Assembly2
public class Test
{
static void Main()
{
Console.WriteLine(Constants.Foo);
}
}
... 那么值 "Hello" 将被内联到 Assembly2 中,您不需要 Assembly1 存在。没有代码会引用它,即使它仍然在 Assembly2 中被列为引用。
但是,如果您曾经通过 反射 访问常量(这是完全合理的),那么您会希望 Assembly1 存在。
我创建了两个依赖于单个 class 库的可执行项目。
class库仅包含classes和常量(无变量或函数),用于存储两个可执行项目之间通信的应用程序级协议信息。
在测试我的两个程序时,我注意到它们 运行 不需要位于同一目录中的 class 库 (DLL)。
这里发生了什么?如果仅使用常量,是否需要分发 DLL?
如果它们是 真正的 常量,由 const
引入,那么每个常量的值将在使用它的地方内联。例如,如果您有:
// Assembly1
public static class Constants
{
public const string Foo = "Hello";
}
// Assembly2
public class Test
{
static void Main()
{
Console.WriteLine(Constants.Foo);
}
}
... 那么值 "Hello" 将被内联到 Assembly2 中,您不需要 Assembly1 存在。没有代码会引用它,即使它仍然在 Assembly2 中被列为引用。
但是,如果您曾经通过 反射 访问常量(这是完全合理的),那么您会希望 Assembly1 存在。