0

我们有一个大型 Silverlight、基于 WCF RIA 的解决方案,可以在我的桌面上使用 VS2010 构建得很好。但是,在 TFS 服务器上,我们看到以下内容:

ViewModels\MyVM.cs (47): The type 'TestService.Web.SystemAccount' exists in both
'd:\Builds\1\MyProduct\Binaries\Silverlight\TestService.dll' and 'd:\Builds\1\MyProduct
\Binaries\Silverlight\CommonService.dll' 

.. 和 ...

Generated_Code\TestService.Web.g.cs (37476): The type 'TestService.Web.GroupToRule' in
'd:\Builds\1\MyProduct\Sources\Source\UI\TestService\Generated_Code\TestService.Web.g.cs' 
conflicts with the imported type 'CommonService.GroupToRule' in 'd:\Builds\1\MyProduct
\Binaries\silverlight\CommonService.dll'. Using the type defined in 'd:\Builds\1\MyProduct
\Sources\Source\UI\CommonService\Generated_Code\CommonService.Web.g.cs'.

直到周末开发人员检查(不幸的是,检查非常大)之前,所有人都很高兴。我们已经查看了变更集中的变化,但没有发现任何东西。

我们使用的方法与此问题此处提到的方法类似,因此我们有一个预构建解决方案来避免 RIA 代码生成过程可能引入的循环引用。

我们的怀疑是构建顺序已被更改并正在检查这一点,但任何人都可以提出一些诊断步骤或解决方案吗?

4

2 回答 2

0

我们解决了根本原因(我们认为,至少它现在可以在 TFS 上使用 MSBuild 进行编译)。

我们有自己的 DomainServiceFactory 来创建 WCF RIA 域服务实例。在这个工厂中,我们使用自定义对象注入当前经过身份验证的用户(假设用户已经登录并且域服务需要经过身份验证的用户)。此外,我们还有其他服务使用的公共域服务。

好的,设置场景。

造成这种混乱的罪魁祸首似乎是我们用来表示经过身份验证的用户的自定义对象。不知何故,我们在编译时遇到了这种情况,即从公共域服务和其他引用公共域服务的域服务中可以看到该对象。

解决方案是使用服务定位器将公共域与需要它的服务分开。

于 2012-04-19T15:23:34.930 回答
0

根据给定的信息,很难说任何合理的事情。

如果您确定在某些变更集之前一切都构建良好,您可以获得该“好”修订版和后来的“坏”修订版的干净构建日志并比较它们。一个好的差异工具可能有助于完成这项任务。由于 MSBuild 日志可能非常冗长,因此可能需要一些可能是手写的分析工具。

另外,请在您引用的主题中查看此答案。这个建议可以被认为是官方的,因为 MSBuild 团队的一个人在他们的博客中提出了同样的建议。

于 2012-04-17T04:10:26.117 回答