为什么添加Newtonsoft.Json后Team City的编译错误?

时间:2014-06-09 18:19:10

标签: c# json teamcity

由于使用了JavascriptSerializer,我有一个发送错误的DateTime数据的服务。我使用Nuget将Newtonsoft添加到项目中,并使用它。这是它在代码中使用的唯一地方(旧方式,然后是新方法):

374 
-            var messageString = new JavaScriptSerializer().Serialize(messageDetails);

374 
+            var messageString = Newtonsoft.Json.JsonConvert.SerializeObject(messageDetails);

以下是Team City构建期间发生的错误:

Consumer\MetricTrackingMQServiceConsumer.cs(374, 49): error CS0122: 'Newtonsoft.Json.JsonConvert' is inaccessible due to its protection level 
Consumer\MetricTrackingMQServiceConsumer.cs(374, 61): error CS0117: 'Newtonsoft.Json.JsonConvert' does not contain a definition for 'SerializeObject'

该项目在当地编制得很好。为什么在Team City失败?

2 个答案:

答案 0 :(得分:3)

当您使用NuGet在此处包含依赖项时,我强烈建议您避免这些类型的问题。

  1. 确保您对Newtonsoft DLL的引用指向NuGet包文件夹。
  2. 从源代码管理中排除NuGet包。
  3. 在解决方案构建步骤之前添加“Nuget Installer”类型构建步骤,以恢复解决方案引用的所有NuGet包。
  4. 这有许多优点,但最重要的是考虑到您当前的问题,它确保您的解决方案引用的DLL版本可用且位于正确的位置。

答案 1 :(得分:0)

以下步骤为我解决了这个问题:

  1. 在构建中的nuget安装程序步骤中:您可能需要“禁用从本地计算机缓存中查找软件包”

  2. 在项目中通过nuget卸载newtonsoft引用。在文本编辑器中打开csproj文件,然后手动删除其中对newtonsoft的任何剩余引用。保存csproj文件,重新加载项目

  3. 通过nuget重新安装newtonsoft

  4. 将您的更改发布到您的存储库(git或您拥有的任何内容)

  5. 重新运行teamcity build