Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果类发生更改,是否需要重新编译和重新部署项目中的所有程序集?_C#_.net - Fatal编程技术网

C# 如果类发生更改,是否需要重新编译和重新部署项目中的所有程序集?

C# 如果类发生更改,是否需要重新编译和重新部署项目中的所有程序集?,c#,.net,C#,.net,如果我有一个具有一定数量的公共类的类库(本例中为5个),并且我有3个依赖于该类库的项目(本例中为3个),我决定更改其中一个类,但3个项目中只有1个依赖于该类 我是否需要编译/链接/部署所有3个项目 NET基本上依赖于类的名称,还是有某种类型的寻址依赖关系?(我有C++背景,所以我知道C++中我必须重新部署所有3个项目)。 < P>如果类从接口继承,并且不改变接口(但只实现类实现),那么如果它们只依赖于与类通信的接口,则不必更改依赖程序集。 如果更改依赖程序集所依赖的类的API(如方法签名或名称)

如果我有一个具有一定数量的公共类的类库(本例中为5个),并且我有3个依赖于该类库的项目(本例中为3个),我决定更改其中一个类,但3个项目中只有1个依赖于该类

我是否需要编译/链接/部署所有3个项目


NET基本上依赖于类的名称,还是有某种类型的寻址依赖关系?(我有C++背景,所以我知道C++中我必须重新部署所有3个项目)。

< P>如果类从接口继承,并且不改变接口(但只实现类实现),那么如果它们只依赖于与类通信的接口,则不必更改依赖程序集。 如果更改依赖程序集所依赖的类的API(如方法签名或名称),则必须修复依赖程序集以使用新API。这包括更改类本身的名称


所以这里的关键是提供一个稳定的API。如果更改API,那么必须更改依赖于API的代码。如果程序集不依赖(即,它不依赖于您正在更改的任何API依赖项),则不必重新部署它。

如果您重新编译类库项目,创建新的DLL,则不必重新编译不依赖于DLL更改的项目,只要:

  • 每个项目所依赖的公共接口不会以中断的方式更改
  • 这些项目仍然与DLL的新版本号兼容

如果你的依赖项目不需要特定版本号或版本范围的DLL,版本考虑不适用。

如果你只需要1个项目使用这个新类,为什么你需要重新编译/链接/部署到C++中的所有项目?这就是为什么你应该接受开/闭原理。