C# “无法访问”;System.Servicemodel.Web”的;在可移植类库中,即使在对象浏览器中可见

C# “无法访问”;System.Servicemodel.Web”的;在可移植类库中,即使在对象浏览器中可见,c#,portability,portable-class-library,C#,Portability,Portable Class Library,到目前为止,我阅读的所有文档都建议您可以从可移植类库创建web服务库,它们都声明: System.ServiceModel& System.ServiceModel.Web 可用于“WebGet”属性和其他WCF Rest功能 但是,当我尝试引用名称空间时,它会说它不可用,并且在代码中浏览时不会显示名称空间 我通常认为这意味着它在可移植类库中不可用,但名称空间在对象浏览器中可见 我甚至尝试将目标框架限制为: .NET 4.03及以上版本 Silverlight 4及以上 但是没有快乐。即

到目前为止,我阅读的所有文档都建议您可以从可移植类库创建web服务库,它们都声明:

  • System.ServiceModel&
  • System.ServiceModel.Web
可用于“WebGet”属性和其他WCF Rest功能

但是,当我尝试引用名称空间时,它会说它不可用,并且在代码中浏览时不会显示名称空间

我通常认为这意味着它在可移植类库中不可用,但名称空间在对象浏览器中可见

我甚至尝试将目标框架限制为:

  • .NET 4.03及以上版本
  • Silverlight 4及以上
但是没有快乐。即使只是使用SL5和.NET 4.5,也不会公开名称空间


有什么想法吗?

我认为Visual Studio 2010在这方面存在某种缺陷。即使
System.ServiceModel
System.ServiceModel.Web
程序集看起来是自动引用的,但默认情况下它们不是,并且相应的命名空间不可用:

若要解决此问题,请打开“添加引用”对话框。所有程序集都将被引用,但它们都不包括在“项目引用”列表中:

若要真的将所需的程序集添加到项目中,请从列表中选择该程序集。现在,首先单击“删除”,然后立即单击“添加”(或者,在列表中双击部件两次)。执行此操作后,“已删除/已添加”程序集现在将显式显示在项目的引用列表中:

现在,您可以键入相应的名称空间和类:

项目能够顺利建成

这似乎适用于最广泛的平台包括,即.NET Framework 4+、Silverlight 4+、WP7+和Windows应用商店应用程序。这已经在VS 2010上通过最新的PCL插件进行了测试

在Visual Studio 2012上,.NET可移植子集作为一个整体列出,因此无法(取消)引用该子集的各个程序集。但是,在VS 2012上,当您创建新的可移植类库时,对
System.ServiceModel
等程序集的访问似乎会自动覆盖


以上所有内容都已在非Express Visual Studio版本的Windows 7系统上进行了测试。

答案很简单:否

您可以在PCL项目中设置所有基本的[DataContract]/[ServiceOperation]/[DataMember]属性,但不能在任何内容上设置Rest实现属性

简单的答案是,尽可能多地提供PCL中的属性,然后在具体实现中应用Rest属性(确实需要生活在PCL中)


同样值得注意的是,当您使用PCL时,许多可序列化标记丢失,因此请将[DataContract][DataMember]属性添加到您的所有模型和属性中,否则您将遇到我发现的问题。

这似乎是合理的,但在VS2010中,这会导致VS崩溃,并且不会保存引用更改。在VS2012中,它不可用,手动添加表示它已被引用:SOdd?也许是暂时的过失?您是否安装了最新的Visual Studio更新,包括最新的便携库工具加载项?我没有遇到任何崩溃,当我关闭并重新打开VS2010时,引用将保持不变。更新后,在VS2012上,您似乎可以自动访问
System.ServiceModel
名称空间。找到原因后,“生产力工具”高级参考对话框在重新应用SP1时被破坏。删除了它,可以添加引用。但是,进一步调查后,在对象浏览器中查看“System.ServiceModel.Web”时,只有JSON名称空间可用。是的,例如,如果您查看名称空间的MSDN文档,则没有任何类在PCL中标记为可用。如果需要System.ServiceModel.Web程序集的较大部分,则很可能必须创建一个.NET Framework专用项目。表示添加一个
[WebGet]
属性,该属性位于-中,但VS2010不允许我添加该文件。这就是我们在这里遇到的问题吗?表示添加一个
[WebGet]
属性,该属性位于-中,但VS2010不允许我添加该文件。