C#: 方法未找到异常(缺少Setter)

5

在调试我的程序时,我遇到了一个非常奇怪的错误。我有一个数据契约,在其中添加了新属性,但其中一个属性会导致以下异常:

方法未找到:'Void Measurement.set_ContactId(Int32)'。

数据契约如下所示:

[DataContract]
public class Measurement
{
    [DataMember]
    public int FactId { get; set; }

    [DataMember]
    public int ContactId { get; set; }
.....

我并不真正了解问题出在哪里,因为我之前添加了一些属性,但它们没有出现问题。

更新:当我尝试给 ContactId 赋值时,异常发生在服务端。

foreach (Measurement m in result.Where(m => m.FactId == factId)){
    m.ContactId = contactId;
  .....

2
我为什么需要那个呢?ContactId的setter已经声明了。而且,如果我尝试添加它,就会出现错误:已经声明了具有相同签名的方法。 - Azimuth
1
进行一次干净的重建并更新您的服务引用。 - Erix
他建议将属性更改为变量 - 只需删除 {get;set;} - Renatas M.
我试图去掉getter和setter,现在出现了“找不到字段:'Measurement.ContactId'”。非常奇怪... - Azimuth
因为属性被翻译成 get_ set_ 方法。这段代码是从你的源代码中复制粘贴的吗?你做错了什么。 - Renatas M.
显示剩余3条评论
3个回答

16

问题出在.NET的缓存中存储了一些较旧版本的DLL。我在整个磁盘上搜索了该DLL,并删除了所有找到的文件(一些文件正在被.NET使用,因此我必须使用Unlocker)。重建项目后,它可以正常工作。


2
如果这个“Measurement”类是你的WCF服务的一部分,那么它会在服务的两端(客户端和服务器端)都存在。两端是否具有相同的版本(其中“ContactId”具有setter函数)?

是的,客户端和服务器端都具有相同版本的“Measurement”。此外,在我尝试为“ContactId”分配值时,异常发生在服务器端。 - Azimuth
你们的WCF协议是什么?TCP,SOAP...? - mbarthelemy
3
这应该是一条评论,而不是一个回答。 - Péter Török

0
如果方法来自Nuget包,请更新或重新安装该包。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接