0

好的...严重的问题。

我进行了更新,认为我可以继续使用 CTP2 版本的 Microsoft.Data.Services.Client 库进行连接,直到他们更新了 Silverlight 位。不去。好吧,我可以忍受。

我将服务回滚到重新编译的 CTP2 库( Microsoft.Data.Services + Microsoft.Data.Services.Client ),然后在 silverlight 中更新了服务参考。

此时,服务和 SL3 客户端都在使用 CTP2 位。应该没问题吧?错误的。非常非常错误。

System.Data.Services.Client.DataServiceCollection' 不包含采用 '2' 参数的构造函数

这是一个严重的阻碍,并且没有提到此更新会破坏 CTP2 功能。老实说,关于 SL dll 的警告还不够 :)

关于如何解决这个问题的任何想法?我应该尝试卸载更新还是可以在某个配置文件中指定一个较旧的库?

帮助!:)

4

1 回答 1

1

首先,问题是您的一个项目选择了错误的程序集,它可能是服务,但很可能是客户端应用程序。

DataServiceCollection 的 CTP 2 v1.5 中可用的构造函数是:

private DataServiceCollection();
internal DataServiceCollection(IEnumerable<T> items);
protected DataServiceCollection(DataServiceContext context, string entitySetName, IEnumerable<T> items, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
internal DataServiceCollection(DataServiceContext context, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback, IEnumerable<T> items);

RTM 版本(您安装的更新)KB976126 中可用的构造函数是:

public DataServiceCollection();
public DataServiceCollection(IEnumerable<T> items);
public DataServiceCollection(DataServiceContext context);
public DataServiceCollection(IEnumerable<T> items, TrackingMode trackingMode);
public DataServiceCollection(DataServiceContext context, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
public DataServiceCollection(IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
public DataServiceCollection(DataServiceContext context, IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);
internal DataServiceCollection(object atomMaterializer, DataServiceContext context, IEnumerable<T> items, TrackingMode trackingMode, string entitySetName, Func<EntityChangedParams, bool> entityChangedCallback, Func<EntityCollectionChangedParams, bool> collectionChangedCallback);

我建议如果您想使用 CTP dll,请检查您对客户端应用程序和任何其他使用 System.Data.Services.Client.dll 的应用程序的引用并更改为 Microsoft.Data.Services.Client.dll (位于 ADO.NET Data Services V1.5 CTP2 文件夹中的程序文​​件中)。

我也安装了最新版本,目前正在我的 PC 上运行这两个版本。

另一个重要的事情是检查全局程序集缓存,因为两个版本都将安装在那里(CTP 2 ddls 的版本号为 99.0.0.0)。

我所做的是为 CTP dll 添加了来自 ctp 文件夹而不是全局程序集缓存的引用。

问候

丹尼尔·波特拉

更新:Soulhuntre 它必须是 Web 服务引用正在使用的 EntityClassGenerator,服务引用必须使用 GAC system.data.services.client dll 来生成类而不是旧的 CTP 类。您实际上可以做两件事,一是按照我上面所说的去做,另一件事是删除应该恢复所做更改的更新(卸载 KB)。您甚至可以尝试删除旧的服务引用并再次创建它,同时确保它使用 CTP dll 来生成类。

它适用于我的解决方案,因为我已经编写了自己的 DataServiceClientGenerator 实现,可以做 MS 提供的那个没有做的神奇事情,这一定是我可以毫无问题地运行两种安装的原因。

更新结束。

于 2009-12-17T16:20:26.457 回答