ASP.NET Framework 4.0和C#
我有两个dll,data.dll
和adapter.dll
。 Adapter.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中发生了变化。
请告诉我可能出现的问题?
感谢。 亚历克斯
答案 0 :(得分:1)
在 Adapter.dll 中编译代码时,C#编译器会根据 Adapter.dll 引用的程序集公开的界面元素来执行此操作。对于类型Guid
的属性,编译器生成的setter和getter方法具有非常特定的签名。当 Adapter.dll 中引用 Data.dll 中的类的此类属性时,编译器会调用这些方法。如果将属性类型更改为Guid?
(可为空),则 Data.dll 中此属性的setter和getter将具有不同的签名。因此,将找不到在 Adapter.dll 调用中编码的旧方法。
您不能对其他程序集使用的界面元素进行更改,也不能重新部署其他程序集。