由于使用了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失败?
答案 0 :(得分:3)
当您使用NuGet在此处包含依赖项时,我强烈建议您避免这些类型的问题。
这有许多优点,但最重要的是考虑到您当前的问题,它确保您的解决方案引用的DLL版本可用且位于正确的位置。
答案 1 :(得分:0)
以下步骤为我解决了这个问题:
在构建中的nuget安装程序步骤中:您可能需要“禁用从本地计算机缓存中查找软件包”
在项目中通过nuget卸载newtonsoft引用。在文本编辑器中打开csproj文件,然后手动删除其中对newtonsoft的任何剩余引用。保存csproj文件,重新加载项目
通过nuget重新安装newtonsoft
将您的更改发布到您的存储库(git或您拥有的任何内容)
重新运行teamcity build