【问题标题】:Is a DLL with only constants needed in distribution?分发时是否需要仅包含常量的 DLL?
【发布时间】:2015-01-14 16:45:37
【问题描述】:

我创建了两个依赖于单个类库的可执行项目。

类库只包含类和常量(没有变量或函数),用于存储两个可执行项目之间通信的应用级协议信息。

在测试我的两个程序时,我注意到它们运行时不需要位于同一目录中的类库 (DLL)。

这里发生了什么?如果只使用常量,我是否需要分发 DLL?

【问题讨论】:

  • 您可能不需要 const 值,因为它们在编译时被硬编码到调用站点中,但您当然应该需要类定义...

标签: c# dll compilation constants


【解决方案1】:

如果它们是真正的 常量,由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 中列为引用。

但是,如果您曾经通过 reflection 访问常量(这是完全合理的),那么您会希望 Assembly1 存在。

【讨论】:

  • 我发现,如果我使用反射将两个程序集解耦到它们根本没有明确引用彼此的程度,那么我需要使用 Assembly.Load (@ 987654324@ 也不起作用,因为对程序集的引用似乎也已被优化。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-16
  • 1970-01-01
相关资源
最近更新 更多