1

我已经使用 REST 入门工具包编写了一些代码,它在我的开发机器上运行良好。但是,当我将它上传到我们的服务器时,页面会给我以下错误消息......

CS1684:警告为错误:对“System.Runtime.Serialization.Json.DataContractJsonSerializer”类型的引用声称它在“c:\WINNT\assembly\GAC_MSIL\System.ServiceModel.Web\3.5.0.0__31bf3856ad364e35\System.ServiceModel”中定义。 Web.dll',但找不到

我已经逐行删除了代码,看来以下代码行正在触发错误...

HttpContent newOrganizationContent = HttpContentExtensions.CreateXmlSerializable(newOrganizationXml);

真的不知道如何解决它。我认为这可能是因为它需要更新版本的框架才能运行,但在 IIS 中查看它说它正在运行版本 2.0.50727,我认为这是最新版本,因为它说即使我们使用的是框架 3.5

很困惑,有什么想法吗?

乔恩

4

1 回答 1

1

起初我认为这可能是因为您要部署的服务器没有安装 .NET Framework 3.5SP1,只有 .NET 3.5RTM。

但是,在检查 .NET 3.5 RTMSystem.ServiceModel.Web.dll程序集时,我看到System.Runtime.Serialization.Json.DataContractJsonSerializer实际已定义。

编译器警告 CS1684表明System.ServiceModel.Web.dll服务器的 GAC 中有一个程序集,但没有System.Runtime.Serialization.Json. DataContractJsonSerializer定义。

所以我会检查的事情:

  • 检查部署服务器是否至少运行 .NET 3.5 RTM,并且测试版或候选发布版本未在使用中或未剩余。

  • 在 Visual Studio 2008 中,确保在项目属性中选择 .NET 3.5 的“目标框架”。

您可以做的最后一项检查是查看问题是否出在服务器的框架安装上,即打开一个简单的应用程序以DataContractJsonSerializer直接使用。该课程的 MSDN 文档页面上有一个示例:

DataContractJsonSerializer 类 (MSDN)

作为最后的手段,如果服务器在您的控制之下,那么我将卸载 .NET Framework 3.5,然后从以下位置重新安装:

Microsoft .NET Framework 3.5 Service Pack 1(完整安装)

更新:

根据您的评论:

如果您正在运行 3.5 的测试版,那么很可能DataContractJsonSerializer它不在System.ServiceModel.Web.dll程序集中。

我似乎记得在 CTP、beta 版和候选发布版本中,这方面的最新突破性变化。我依稀记得这DataContractJsonSerializer是由于 JSON 的日益普及和社区压力而导致的这些后期添加/更改之一。我的记忆有点模糊,但它敲响了警钟。

要替换 DLL,您需要从 GAC 注销当前版本,然后使用该GACUTIL.exe工具注册 RTM。我不建议混合 RTM 和 beta 位,你会让自己面临不可预测的行为。

于 2010-03-25T07:24:50.553 回答