是否有任何方法可以避免在使用多个域时已经引用的类型的代码生成?
让我解释一下。
我有一个silverlight应用程序的应用程序基础设施。该infra包在服务器端包括3个(RIA)域服务(身份验证,日志记录,服务发现)- infra . web .dll和一个silverlight dll - ClientInfra.dll,它在应用程序启动时实现用户身份验证和一些其他基类(如BaseApp和BaseView),而 infra . web .dll被定义为WCF RIA服务链接ClientInfra.dll。
现在我正在开发一些演示silverlight应用程序来测试我的基础设施。我已经创建了
DemoApp。Web,它引用 infra .Web.dll(为了获得infra服务)
和2个silverlight项目:
DemoApp。将DemoApp.Web.dll定义为WCF RIA服务链接的数据,以便获得生成的代码和引用 clientinfrastructure .dll
DemoApp这是实际的silverlight应用程序,引用ClientInfra.dll
问题是,当我尝试使用一个RIA服务从silverlight应用程序,我有一个错误,域服务类都定义在 clientinfri .dll和DemoApp.Data。据我所知,问题是来自Infra.Web.dll的代码已生成两次:第一次为ClientInfra.dll,第二次为DemoApp.Data。
是否有任何方法来避免代码生成的类型都已经引用,就像在我的情况下,ClientInfra.dll allready已生成的基础设施服务,所以没有必要在DemoApp.Data中再次生成它?
我将尽量使我的问题更简单。我如何避免ria服务类型生成(在silverlight中)已经为我引用的dll生成的类型?类型生成重复导致错误CS0433,相同的类型在两个不同的dll中定义 我发现了一些有趣的事实。如果我直接从DemoApp (silverlight应用程序项目)引用ClientInfra.dll,那么已经在ClientInfra.dll中生成的数据类型将不再生成。但是,如果我从DemoApp中引用ClientInfra.dll。数据我确实得到了重复的类型代码生成与编译警告,相同的类型被定义在引用的dll和生成的代码。我在msdn文档中发现了以下内容
分析中间层构建或引用的所有程序集项目的域服务类、实体类或共享代码。
RIA Services在生成代理之前检查现有成员类。类型中已定义的任何成员都不会生成代理类。
这意味着我的场景应该像我预期的那样工作!
为了检查代码生成过程,我将MSBuild项目设置为构建输出冗长性(工具->选项->项目和解决方案->构建和运行)为正常(而不是默认的最小)。然后,在编译之后,我发现DemoApp。数据项目未能加载ClientInfra.dll,其中包括已经生成的代理。生成器忽略它,从头生成所有的类。
我已经解决了这个加载问题,现在一切正常。
我有一个类似的基础设施,但是我用SOAP公开了DomainServices,并在其他应用程序中使用这些服务,所以,我应该你对你的项目做同样的事情。