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

如何为Silverlight 5生成OData v4客户端?,silverlight,asp.net-web-api,odata,generator,odata-v4,Silverlight,Asp.net Web Api,Odata,Generator,Odata V4,我们正在尝试为ASP.NET+Silverlight 5安装Web API 2.2和OData v4 initiallpoc有一个使用Simple.OData连接的单元测试项目。这很有效。但我们无法在Silverlight 5上设置OData客户端 使用客户端代码生成器v4并不断获取错误 命名空间中不存在类型或命名空间名称“Client” “Microsoft.OData”是否缺少程序集 参考C:\Workspaces\GKS\Main\Source\Simutek.GKS\Source\Sim

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

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

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

命名空间中不存在类型或命名空间名称“Client” “Microsoft.OData”是否缺少程序集 参考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上,但实际上它并没有在其目标中指定SL5。 我现在看到,一揽子计划只针对

便携式网络45+wp8+win8+wpa

因此,虽然我可以在PCL项目中进行工作,但我不能在针对Silverlight 5的项目中进行工作


有没有解决办法,有谁做到了这一点

您应该使用一个支持Silverlight的PCL,两个候选是ODataLib Microsoft.OData.Core和Simple.OData.Client,后者构建在ODataLib之上。它们都不支持类生成,但自己开发应该没什么大不了的。

Silverlight不支持由Microsoft的OData v4客户端代码生成器visx OData客户端T4生成的代码,但没有人强迫您使用生成的代码


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

我使用的是您伟大的库Simple.OData,但我无论如何都不想使用的生成类引用了Microsoft.OData.Client,如果PCL以SL5为目标,它将不会运行。按照您的建议跳过生成的类听起来不错,但我还没有找到任何关于这方面的例子。你知道该去哪里找吗?好吧,我想我现在差不多找到了。简单地删除了生成的类、T4模板和所有内容,因为我不使用它们。我初始化了ODataClient并用于,因为这在以前的测试中起作用。它通过Simple.OData.Client.FluentCommand..DisplayClass..访问方法AnonymousType..get.[MyProperty],生成MethodAccessException,但尝试运行时会生成。好奇,因为我没有任何私人的二传。为什么使用反射生成它们?请尝试使用不引用Microsoft.OData.Client中任何内容的POCO-plain C类。查看服务元数据并将列映射到C类型。我正在使用类型生成器扩展Simple.OData.Client,但可能需要一两个月的时间才能准备好。但是手动定义类型是很简单的,看看微软TripPin OData示例中的实体示例:我使用的是一个简单的PCL,目标是.Net 4.5和SL5。这个错误听起来像是PCL中使用Type.GetFields而不是Type.GetProperties时出现的反射问题?