找不到属性方法

时间:2014-04-04 03:48:43

标签: asp.net c#-4.0

ASP.NET Framework 4.0和C#

我有两个dll,data.dlladapter.dllAdapter.dll参考data.dll

例如,在data.dll中我有customer.cs实体。我添加了属性调用Currency_Id,数据类型是GUID非null。我在adapter.dll中使用过它。构建整个项目并发布到生产中。

工作正常。然后我改变了Currency_Id not null to null。然后仅构建data.dll并仅发布data.dll。然后我收到了错误 - :

2014-04-03 23:40:49,707 [12] DEBUG SPO.ORBIS.Business.Purchasing.ApprovedVendorListController [(null)] – Method not found: 'Void SPO.ORBIS.Data.Purchasing.Dto.VendorBankAccountsDto.set_CurrencyId(System.Guid)'.
System.MissingMethodException: Method not found: 'Void SPO.ORBIS.Data.Purchasing.Dto.VendorBankAccountsDto.set_CurrencyId(System.Guid)'.
   at SPO.ORBIS.DataAdapter.Purchasing.ApprovedVendorListRepository.GetVendorBankAccounts(Guid vendorId)
   at SPO.ORBIS.DataAdapter.Purchasing.ApprovedVendorListRepository.GetVendorDetails(Guid vendorId)
   at SPO.ORBIS.Business.Purchasing.ApprovedVendorListController.GetVendorDetails(Guid vendorId)

但如果我与adapter.dll一起发布data.dll,它就可以了。但我们使用的是msbuild软件并且只发布data.dll,因为它只是在data.dll中发生了变化。

请告诉我可能出现的问题?

感谢。 亚历克斯

1 个答案:

答案 0 :(得分:1)

Adapter.dll 中编译代码时,C#编译器会根据 Adapter.dll 引用的程序集公开的界面元素来执行此操作。对于类型Guid的属性,编译器生成的setter和getter方法具有非常特定的签名。当 Adapter.dll 中引用 Data.dll 中的类的此类属性时,编译器会调用这些方法。如果将属性类型更改为Guid?(可为空),则 Data.dll 中此属性的setter和getter将具有不同的签名。因此,将找不到在 Adapter.dll 调用中编码的旧方法。

您不能对其他程序集使用的界面元素进行更改,也不能重新部署其他程序集。