none
AutoRest 的 Microsoft.Rest.ClientRuntime 專案無法建置與 Newtonsoft.Json 有關代碼 RRS feed

  • 問題

  • 環境:Windows 10 64bit, Visual Studio 2015 Update 2

    問題:各位好,我從 https://github.com/Azure/autorest 使用 Visaul Studio 的 Git 版控方式,

    複製了原始碼下來,在初步做建置的時候,Microsoft.Rest.ClientRuntime 專案無法建置,

    出現.NETPortable 編譯的部分,都有參考 Newtonsoft.Json 錯誤的訊息,

    在參考的部分,錯誤是這樣顯示

    完整訊息是:NU1002 The dependency Newtonsoft.Json 6.0.8 in project Microsoft.Rest.ClientRuntime does not support framework .NETPortable,Version=v4.5,Profile=Profile111.

    (雖然這邊寫著不支援,但我想原本應該是支援才可能使用該版本)

    在package.json中,也有提示錯誤

    單獨建置此專案,錯誤訊息:

    我猜測是 Newtonsoft.Json 參考的問題,所以後面錯誤訊息都顯示跟 Newtonsoft.Json 有關的類別與方法,

    我嘗試做了些解決方式,但都不行,

    嘗試1. 更新 Newtonsoft.Json 的版本至最新,依然寫著 .NETPortable 不支援

    嘗試2. 移除 package.json 中的 Newtonsoft.Json 部分,改由手動在參考用瀏覽 packages\Newtonsoft.Json.6.0.8 (net45, portable-net40+sl5+wp80+win8+wpa81) 與packages\Newtonsoft.Json.7.0.1 (portable-net45+wp80+win8+wpa81+dnxcore50)對應版本的 dll 加入參考,這麼做參考的部分沒錯誤了,

    但是一樣無法編譯過,錯誤訊息更多了,例如:

    ...\Serialization\Iso8601TimeSpanConverter.cs(70,41): .NETPortable,Version=v4.5,Profile=Profile111 error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
    ...\Serialization\Base64UrlJsonConverter.cs(82,40): .NETPortable,Version=v4.5,Profile=Profile111 error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
    ...\Serialization\Base64UrlJsonConverter.cs(82,73): .NETPortable,Version=v4.5,Profile=Profile111 error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'.
    ...\Serialization\Iso8601TimeSpanConverter.cs(44,32): .NETPortable,Version=v4.5,Profile=Profile111 error CS0115: 'Iso8601TimeSpanConverter.ReadJson(JsonReader, Type, object, JsonSerializer)': no suitable method found to override
    ...\Serialization\Iso8601TimeSpanConverter.cs(70,30): .NETPortable,Version=v4.5,Profile=Profile111 error CS0115: 'Iso8601TimeSpanConverter.CanConvert(Type)': no suitable method found to override
    ...\Serialization\Iso8601TimeSpanConverter.cs(15,18): .NETPortable,Version=v4.5,Profile=Profile111 error CS0534: 'Iso8601TimeSpanConverter' does not implement inherited abstract member 'JsonConverter.ReadJson(JsonReader, Type, object, JsonSerializer)'
    ...\Serialization\Iso8601TimeSpanConverter.cs(15,18): .NETPortable,Version=v4.5,Profile=Profile111 error CS0534: 'Iso8601TimeSpanConverter' does not implement inherited abstract member 'JsonConverter.CanConvert(Type)'
    ...\Serialization\Base64UrlJsonConverter.cs(55,30): .NETPortable,Version=v4.5,Profile=Profile111 error CS0115: 'Base64UrlJsonConverter.CanConvert(Type)': no suitable method found to override
    ...\Serialization\Base64UrlJsonConverter.cs(63,32): .NETPortable,Version=v4.5,Profile=Profile111 error CS0115: 'Base64UrlJsonConverter.ReadJson(JsonReader, Type, object, JsonSerializer)': no suitable method found to override

    第一次建置跨平台的專案,請問我是否少了什麼步驟才造成此錯誤?

    2016年4月30日 下午 02:24

解答

  • 嗨,各位,我已經解決了,

    由於預設從Github複製下來的原始碼,依然無法使用 VS2015編譯,

    確認與 Building AutoRest 所需條件已達成,但依舊如題,

    後來我繼續嘗試改由手動參考 nuget 所下載的 packages 組件,

    這次我仔細查看後,發現.NETPortable 參考部分需要支援 ASP.NET Core 1.0,

    由於第一次嘗試的時候,是安裝 packages\Newtonsoft.Json.6.0.8 (portable-net40+sl5+wp80+win8+wpa81) 作為該參考的組件,

    因發現到這裡有差異,故改使用 packages\Newtonsoft.Json.6.0.8 (portable-net45+wp80+win8+wpa81+aspnetcore50) 作為 .NETPortable Subset 參考的組件,

    如此一來就能成功建置了,至於為何要手動加入參考這點我不明白,

    因為實際上使用的DLL都是由nuget下載來的,此方法提供給有需要修改該專案的人參考。

    • 已標示為解答 503 2016年5月1日 下午 12:47
    2016年5月1日 下午 12:47

所有回覆

  • 嗨,各位,我已經解決了,

    由於預設從Github複製下來的原始碼,依然無法使用 VS2015編譯,

    確認與 Building AutoRest 所需條件已達成,但依舊如題,

    後來我繼續嘗試改由手動參考 nuget 所下載的 packages 組件,

    這次我仔細查看後,發現.NETPortable 參考部分需要支援 ASP.NET Core 1.0,

    由於第一次嘗試的時候,是安裝 packages\Newtonsoft.Json.6.0.8 (portable-net40+sl5+wp80+win8+wpa81) 作為該參考的組件,

    因發現到這裡有差異,故改使用 packages\Newtonsoft.Json.6.0.8 (portable-net45+wp80+win8+wpa81+aspnetcore50) 作為 .NETPortable Subset 參考的組件,

    如此一來就能成功建置了,至於為何要手動加入參考這點我不明白,

    因為實際上使用的DLL都是由nuget下載來的,此方法提供給有需要修改該專案的人參考。

    • 已標示為解答 503 2016年5月1日 下午 12:47
    2016年5月1日 下午 12:47
  • 你好,我在使用的过程中也遇到了同样的问题。

    关于你第二次正确地配置Newtonsoft.Json的方法,可以更详细一些吗?

    我尝试在project.json中删除关于Newtonsoft.Json的内容后,直接在专案中增加引用Newtonsoft.Json.6.0.8 (portable-net45+wp80+win8+wpa81+aspnetcore50)和Newtonsoft.Json.7.0.1 (portable-net45+wp80+win8+wpa81+dnxcore50)。但是失败了。

    2016年5月11日 上午 08:52