如何为 Silverlight 5 生成 OData v4 客户端?

How to generate OData v4 Client for Silverlight 5?

我们正在尝试为 ASP.NET + Silverlight 5 安装 Web API 2.2 和 OData v4。

初始 POC 有一个使用 Simple.OData 连接的单元测试项目。这很好用。但是我们无法在 Silverlight 5 上设置 OData 客户端。

使用客户端代码生成器 v4 并不断出现错误

The type or namespace name 'Client' does not exist in the namespace 'Microsoft.OData' (are you missing an assembly reference?) C:\Workspaces\GKS\Main\Source\Simutek.Gks\Source\Simutek.Gks.UI.SL.Common\GksODataClient.cs Simutek.Gks.UI.SL.Common

包:

  <package id="Microsoft.OData.Client" version="6.12.0" targetFramework="sl50" />
  <package id="Microsoft.OData.Core" version="6.12.0" targetFramework="sl50" />
  <package id="Microsoft.OData.Edm" version="6.12.0" targetFramework="sl50" />
  <package id="Microsoft.Spatial" version="6.12.0" targetFramework="sl50" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="sl50" />

引用看起来不错,我们还在 app.config:

中尝试了 AssemblyBinding
<dependentAssembly>
    <assemblyIdentity name="Microsoft.OData.Edm" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.12.0.0" newVersion="6.12.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.OData.Core" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.12.0.0" newVersion="6.12.0.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="Microsoft.Spatial" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.12.0.0" newVersion="6.12.0.0" />
</dependentAssembly>

更新: 事实上,虽然 Microsoft.OData.Client NuGet 包安装在 Silverlight 上,但它实际上并没有在其目标。 我现在看到该软件包仅针对

portable-net45+wp8+win8+wpa

所以虽然我可以在 PCL 项目中进行,但我不能在一个针对 Silverlight 5 的项目中进行。

是否有解决方法,有人实现了吗?

您应该使用支持 Silverlight 的 PCL 之一,两个候选者是 ODataLib (Microsoft.OData.Core) 和 Simple.OData.Client,后者建立在 ODataLib 之上。 None 其中支持 class 生成,但自己生成应该没什么大不了的。

Silverlight 不支持微软的OData v4 Client Code Generator visx (OData Client T4) 生成的代码,但是没有人强迫你使用生成的代码。

只需使用您选择的库创建与 OData 服务的连接并重用您自己的类型(业务对象)。