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

时间:2012-12-05 11:14:18

标签: c# portability portable-class-library

我迄今阅读的所有文档都建议您可以从可移植类库中创建Web服务库,它们都声明:

  • System.ServiceModel&
  • System.ServiceModel.Web

可用于“WebGet”属性和其他WCF Rest功能。

然而,当我尝试引用命名空间时,它说它不可用,并且在代码中浏览不会显示命名空间。

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

我甚至尝试过限制我所针对的框架:

  • .NET 4.03及以上
  • Silverlight 4及以上

但没有喜悦。即使只使用SL5和.NET 4.5仍然没有公开命名空间

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

答案很简单就是没有

您可以在PCL项目中使用所有基本的[DataContract] / [ServiceOperation] / [DataMember]属性,但不能将Rest Implementation属性放在任何内容上。

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

另外值得注意的是,当您使用PCL时,很多可序列化标签都会丢失,因此请将[DataContract] [DataMember]属性添加到您的所有模型和属性中,否则您将遇到我遇到的问题。 / p>

答案 1 :(得分:0)

我认为Visual Studio 2010中存在某种缺陷。即使System.ServiceModelSystem.ServiceModel.Web程序集似乎是自动引用的,默认情况下它们不是,并且相应的名称空间不可用:

ServiceModel namespace not defined

要解决此问题,请打开添加引用对话框。所有程序集似乎都会被引用,但它们都不包含在项目 References 列表中:

Assemblies appear to be referenced

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

Removing/adding assemblies

现在可以在键入时使用相应的命名空间和类:

ServiceModel namespace available

可以成功构建项目。

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

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

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