服务引用 - 为啥在引用的程序集中重用类型

Posted

技术标签:

【中文标题】服务引用 - 为啥在引用的程序集中重用类型【英文标题】:Service reference - why reuse types in referenced assemblies服务引用 - 为什么在引用的程序集中重用类型 【发布时间】:2017-03-03 13:24:18 【问题描述】:

我按照说明向我的项目添加服务引用,默认情况下,“在引用的程序集中重用类型”被勾选。

如果我保持勾选状态,我会在 Label 等控件上收到模棱两可的警告,我现在必须完整声明。

如果我取消勾选,警告就会消失。

我的问题是:

    为什么要重用类型?

    这到底是什么意思?

    不使用会有什么问题?

【问题讨论】:

【参考方案1】:

我知道我的回答晚了两年,但是......

    为什么要重用类型?

为了避免两个类具有相同的名称、类型等。

    这到底是什么意思?

这意味着,如果您同时控制服务器代码和客户端代码,并在单独的程序集中定义数据合同类(并在客户端代码中添加对它的引用),svcutil 将不会生成新类但会重用您已定义的用于服务器的类

    不使用会有什么问题?

如果您 1) 不控制服务器代码或 2) 为所有内容指定完整的命名空间,则通常没有。如果您使用相同的服务器和客户端代码解决方案,您可能会收到模棱两可的警告。

【讨论】:

以上是关于服务引用 - 为啥在引用的程序集中重用类型的主要内容,如果未能解决你的问题,请参考以下文章

WCF常见类型不重用

奇怪错误 - CS0012:类型x在未引用的程序集中定义

帮助 System.Web.Compilation.BuildManager 在非引用程序集中查找类型

EF生成 类型“System.Data.Entity.DbContext”在未被引用的程序集中定义

类型“System.Data.Objects.DataClasses.EntityObject”在未被引用的程序集中定义。

类型“System.Data.Linq.DataContext”在未被引用的程序集中定义。必须添加对程序集“System.Data.Linq, Version=4.0.0.0, Culture=neu