在我的工作场所,我们仅通过替换已更改的程序集(不是我的想法)来部署内部应用程序。
我们可以通过查看编译到程序集中的源文件是否已更改来判断我们需要部署哪些程序集。大多数时候我们不需要重新部署依赖于已更改程序集的程序集。但是,我们发现在某些情况下,即使程序集中的源文件没有更改,我们也需要重新部署它。
到目前为止,我们知道程序集中的任何这些更改都需要重新编译和部署所有依赖程序集:
- 不断变化
- 枚举定义更改(值顺序)
- 函数的返回类型发生变化,调用者使用 var(有时)
- 类的命名空间更改为另一个已引用的命名空间。
还有我们遗漏的其他案例吗?对于为何整个方法存在缺陷(尽管它已被使用多年)的争论,我也持开放态度。
编辑 需要说明的是,我们一直在重新编译,但只是在其中的源文件发生更改的地方部署程序集。
因此,任何破坏编译的内容(方法名称更改等)都将被拾取,因为它们需要更改调用代码。
最佳答案
还有一个:
更改可选参数值。
默认值使用它们直接编译到程序集(如果未指定)
public void MyOptMethod(int optInt = 5) {}
任何这样的调用代码:
theClass.MyOptMethod();
将最终编译为:
theClass.MyOptMethod(5);
如果将方法更改为:
public void MyOptMethod(int optInt = 10) {}
如果您希望应用新的默认值,您将需要重新编译所有依赖程序集。
需要重新编译的其他更改(感谢 Polynomial):
- 对通用类型参数约束的更改
- 更改方法名称(在使用反射时尤其有问题,因为也可能会检查私有(private)方法)
- 异常处理的变化(抛出不同的异常类型)
- 对线程处理的更改
- 等等……等等……等等……
所以 - 总是重新编译一切。
关于c# - 哪些更改需要重新部署依赖程序集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7994527/