2009-04-30 31 views
4

考虑两个.NET的DLL。第一个“application.dll”包含主要的业务逻辑和数据访问代码。第二,“webservice.dll”包括主要的WebMethods链接到的对象和方法与application.dll用于提供Web服务调用现有代码的目的。什么打破了.NET二进制文件(DLL)接口

(例如添加新的类,新的字段或方法添加到现有类等)可以或不可以进行什么样的变化,而不需要webservice.dll重新编译到application.dll?

回答

3

大多数事情都会好起来的;有些东西会打破它:

  • 卸下*类型所使用的(除非您使用类型转发)
  • 删除所使用的*方法(包括构造函数)
  • 改变方法的签名(被使用)
  • 改变公共字段属性(所使用的)
  • 更改系列化内部如果在序列化使用
  • 添加方法的接口,其中第二DLL具有imple一个类型发言:该接口
  • 添加一个抽象方法被继承在第二DLL
  • 几乎任何内部如果哈克反射是(AB)用于
  • 添加约束到一个通用型的基类/方法
  • 标记一个类型sealed当它在第二DLL
  • 添加字段到struct被继承,如果呼叫者使用按成员初始化,而不是构造函数初始化

(删除包括将可访问性更改为非公开)

+1

对接口的任何更改将被打破,虽然,对不对? – 2009-04-30 11:46:54

+0

我在添加此评论时已经添加了接口和抽象方法;-p – 2009-04-30 11:48:06

1

从技术上讲,该名称将打破它(名称和版本以及强命名集合中的关键标记)。否则,该框架将尝试加载和使用该DLL,这将工作或多或少罚款,直到它遇到不同的类型或方法签名,缺少类型等。但请注意,重新使用名称会直回到DLL地狱(或其问题)。

我建议阅读更多关于assembly versioning得到一个想法如何解决这些问题。

0

只要不调用新类,函数[在application.dll中添加],就可以对application.dll进行任何更改,而无需重新编译webservice.dll。 如果您想要使用webservice.dll中的任何application.dll变更,那么您必须重新编译该课程的webservice.dll问题。 dll被websrvice.dll使用,它会破坏你的代码在web服务中。