【问题标题】:Why the compilation error from Team City after adding Newtonsoft.Json?为什么添加 Newtonsoft.Json 后 Team City 出现编译错误?
【发布时间】:2016-03-18 09:09:17
【问题描述】:

我有一个服务由于使用了 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 中失败了?

【问题讨论】:

  • 我猜这个 DLL 没有被检入源代码控制。 Visual Studio 插件不会自动尝试将依赖项拉入源代码控制(这是有道理的,它们可能在 Program Files、GAC 或谁知道在哪里,如果 VS 试图签入 Program,那将是一团糟文件夹)
  • 几乎可以肯定是这样,谢谢@MatthewMartin

标签: c# json teamcity


【解决方案1】:

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

  1. 确保您对 Newtonsoft DLL 的引用指向 NuGet 包文件夹。
  2. 从源代码管理中排除 NuGet 包。
  3. 在解决方案构建步骤之前添加“Nuget 安装程序”类型的构建步骤,以恢复解决方案引用的所有 NuGet 包。

这有许多优点,但最重要的是考虑到您当前的问题,它可以确保您的解决方案引用的 DLL 版本可用并且位于正确的位置。

【讨论】:

    【解决方案2】:

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

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

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

    3. 通过 nuget 重新安装 newtonsoft

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

    5. 重新运行 teamcity 构建

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-08
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 2013-12-11
      • 2018-11-29
      相关资源
      最近更新 更多