2

有什么方法可以避免为使用多个域时已经引用的类型生成代码?

让我解释。


我有一个用于 silverlight 应用程序的应用程序基础设施。这个基础设施包包括服务器端的 3 个 (RIA) 域服务(身份验证、日志记录、服务发现) - Infra.Web.dll和一个 Silverlight DLL - ClientInfra.dll,它在应用程序启动时实现用户身份验证和一些其他基类(像 BaseApp 和 BaseView),而Infra.Web.dll被定义为ClientInfra.dll的 WCF RIA 服务链接。

现在我正在开发一些演示 silverlight 应用程序来测试我的基础设施。我创建了

DemoApp.Web至极 引用 Infra.Web.dll(为了获得基础设施服务)

和2个silverlight项目:

DemoApp.DataDemoApp.Web.dll定义为 WCF RIA Services Link 以获取生成的代码并引用ClientInfra.dll

DemoApp是引用ClientInfra.dll的实际 silverlight 应用程序

问题是,当我尝试使用 silverlight 应用程序中的 RIA 服务之一时,我遇到了一个错误,即域服务类是在ClientInfra.dllDemoApp.Data中定义的。据我了解,问题是来自Infra.Web.dll的代码已生成两次:第一次为ClientInfra.dll,第二次为DemoApp.Data

有什么方法可以避免为已经被引用的类型生成代码,就像我的情况一样, ClientInfra.dll已经生成了基础设施服务,因此不需要在DemoApp.Data中再次生成它?

我会尽量让我的问题更简单。如何避免已经为我引用的 dll 生成的类型的 ria 服务类型生成(在 silverlight 中)?类型生成重复导致错误 CS0433 在 2 个不同的 dll 中定义了相同的类型

我发现了一些有趣的事实。如果我 直接从DemoApp (silverlight 应用程序项目)引用ClientInfra.dll ,那么在ClientInfra.dll中已经生成的数据类型不会再次生成。但是,如果我 从DemoApp.Data引用ClientInfra.dll ,我确实会生成重复类型代码,并带有编译警告,即在引用的 dll 和生成的代码中都定义了相同的类型。

4

2 回答 2

4

我在 msdn 文档中找到了以下内容

分析中间层项目为域服务类、实体类或共享代码构建或引用的所有程序集。

RIA 服务在生成代理类之前检查现有成员。任何已定义的成员都不会在代理类中生成。

这意味着我的场景应该像我预期的那样工作!

为了检查代码生成过程,我将 MSBuild 项目设置为构建输出详细程度(工具->选项->项目和解决方案->构建和运行)为正常(而不是默认的最小)。然后在编译后我发现DemoApp.Data项目无法加载包含已生成代理的ClientInfra.dll 。所以生成器只是忽略它并从头生成所有类。

我已经解决了这个加载问题,现在一切正常。

于 2013-01-07T08:30:35.337 回答
0

我有类似的基础架构,但我使用 SOAP 公开了 DomainServices 并在其他应用程序中使用这些服务,所以,我应该对你的项目做同样的事情。

于 2013-01-05T19:52:14.050 回答