为什么我们的构建不包含所有必需的dll

时间:2010-02-08 11:48:31

标签: .net build remoting

我们有一个.net 2008应用程序,它使用两个dll来远程访问服务器以获取信息。返回的对象。这个对象的一个​​属性是枚举,它保存在第三个dll中。

出于某种原因,当我们构建第三个dll时没有被添加,尽管我现在已经将所有三个dll都包含在解决方案中。

在运行时,当代码反序列化对象时,我们得到一个dll未找到异常,指定dll丢失,对于有问题的dll,它只包含枚举(不是我的设计)

我知道如何强制添加dll?

我可以添加dll作为线束或服务的一部分,但我不应该因为它应该被选为主项目的依赖项

3 个答案:

答案 0 :(得分:3)

那是因为你不需要DLL。枚举赋值被编译为其数值,IL中没有引用类型。例如,这个:

public enum Numbers { Zero, One, Two, Three }

static void Main(string[] args) {
  var n = Numbers.One;
}

汇编到这个:

  IL_0001:  ldc.i4.1          ; NOTE: constant 1 being used here
  IL_0002:  stloc.0

编译器会自动过滤掉实际未使用的程序集的“using”指令。


显然你已经发现了皱纹,在你的问题中放入这样的细节是非常重要的。是的,二进制序列化将在序列化数据中放置类型引用,这是编译器无法看到的。唯一的解决方法是确保将程序集复制到构建目录中。项目+添加现有项目,导航到DLL。在Solution Explorer窗口中选择它,将Copy to Output Directory属性设置为“Copy if Newer”。

答案 1 :(得分:1)

使用post-build event命令将dll添加到bin目录中。

答案 2 :(得分:0)

您是否在参考属性中将“Copy Local”标志设置为true?