我發現與NodaTime相關的舊帖子需要Json.Net v4.5,但這是固定的。我似乎看到與NodaTime.Serialization.JsonNet一樣的事情。可能的NodaTime.Serialization.JsonNet需要Json.NET v 4.5 bug?
最簡單的重現此錯誤的方法:通過添加和刪除NodaTime.Serialization.JsonNet(通過NugGet)到我的解決方案中的VS項目,我得到Json.Net v4.5的運行時程序集綁定/加載錯誤(I已安裝v 6.x)。當我刪除NodaTime.Serialization.JsonNet時,一切都很好。
NodaTime本身就很好 - 它只是當我添加NodaTime.Serialization.JsonNet時發生錯誤。
是否有其他人遇到過這個問題?
一些詳細信息:
我已經進一步縮小下來,並且將問題使得其僅當WCF方法是從PowerShell運行時內調用發生。 NodaTime.Serialization.JsonNet在僅WCF測試中工作得很好。
在調用「ConfigureForNodaTime」時,錯誤是:
無法加載文件或程序集「Newtonsoft.Json,版本= 4.5.0.0,文化=中性 公鑰= 30ad4fe6b2a6aeed」或一種其依賴。該系統找不到指定的文件。
我會繼續看這個,但是想提供一個更新。
其他信息:
=== Pre-bind state information ===
LOG: DisplayName = Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
(Fully-specified)
LOG: Appbase = file:///S:/_Jp/DevProjCommon/__TEST/__TEST/bin/x64/Debug/
LOG: Initial PrivatePath = NULL
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: S:\_Jp\DevProjCommon\__TEST\__TEST\bin\x64\Debug\TestApp.vshost.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
LOG: Attempting download of new URL file:///S:/_Jp/DevProjCommon/__TEST/__TEST/bin/x64/Debug/Newtonsoft.Json.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Major Version
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.
的app.config(僅供參考):
<dependentAssembly>
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0"/>
</dependentAssembly>
喬恩,馬特:
當我打開來源,NodaTime.Serialization.JsonNet項目設置指'C:\ Program Files \ Microsoft SDKs \ Windows Azure.NET SDK \ v2.3 \ ref \ Newtonsoft.Json.dll',v4.0.30319,4.5.0.0,True
建設解決給定的這條道路,這些設置CS項目文件時也許:
<ItemGroup Condition="'$(Portability)' == 'Desktop'">
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\lib\jsonnet\Net35\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
<ItemGroup Condition="'$(Portability)' == 'PCL'">
<Reference Include="Newtonsoft.Json">
<HintPath>..\..\lib\jsonnet\Portable\Newtonsoft.Json.dll</HintPath>
</Reference>
</ItemGroup>
如果我繞過「ConfigureForNodaTime」擴展方法,並嘗試將NodaTime轉換器添加到串行化實例的輔助方法同樣的錯誤發生。所以具體而言,我無法超越轉換器的加入。我無法步入添加轉換器而不觸及裝配加載異常的幫助器方法。
我也已經能夠在PowerShell之外重現這一點,在控制檯應用程序中引用我的web api庫和Json.Net序列化程序集。
我打算將源代碼添加到我的項目(與此測試項目相比)並重新編譯以查看是否可以解決此問題。
更新:
當我打開「所有」的解決方案(源),並嘗試建立我發現下面的警告。作爲一個實驗,我從v3.5客戶端將目標(.net)框架更改爲v4.5,警告消失了。
無法解析主要引用「Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed,processorArchitecture = MSIL」,因爲它對.NET Framework程序集「System.Runtime .Serialization.Formatters.Soap,版本= 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a「,它具有比當前目標框架中的版本」2.0.0.0「更高的版本」4.0.0.0「。 NodaTime.Serialization.JsonNet
更新: 雖然我還沒有確鑿的證據,我可以證實,擺脫的依賴的NuGet問題自己並沒有緩解這個問題(即一個是在我的懷疑)。爲了找到書夾,我將Json.Net和NodaTime的源代碼添加到了我的解決方案中,以獲得更好的控制。
成功的解決方法是將NodaTime項目上的目標框架更改爲.NET v4.5。 v4.0沒有工作,v4.5沒有。這對於NodaTime來說並不是一個「修復」(我真的很喜歡,因爲它本身),因爲其中一個目標是使其可用於廣泛的應用程序,可能不會使用最新的.NET框架版本。但是(我希望)一個數據點可能對診斷可能的變化(如果需要的話)有用。
我現在處於相當的時間壓力之下,但我會承諾最終在我的特殊情況下找到吸菸槍,以防其他人在將來遇到它。
向那,JP
如果沒有看到錯誤信息,很難確切地說出錯。 NuGet包只需要Json.NET> = 4.5.11,所以我希望它可以工作。你可以在一個微小的控制檯應用程序中重現嗎? –
嗨,喬恩,你好嗎,先生! – ivnext
我無法在控制檯應用程序中重現該問題,至少尚未。 這是一個相當複雜的應用程序(PowerShell二進制模塊,WCF客戶端等)。我進一步縮小了它的範圍:執行'ConfigureForNodaTime'語句時發生異常。 這比我原來的評論更具體。 :)如果我註釋掉該聲明,則不會發生錯誤。 謝謝! -JP – ivnext