2017-10-20 82 views
11

我有一個最初以4.6.1爲目標的Web應用程序。此Web應用程序引用類庫;而這又引用了Net Standard 1.6類庫。從Net 4.6.1/4.7引用Net Standard的錯誤

將引用添加到Net Standard庫是最新的更改,並且似乎導致它中斷:Web應用程序工作正常,直到引入Net Standard庫爲止;在這一點,我開始收到錯誤:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

System.Runtime包括作爲NuGet包的Web應用程序。

它可能不相關,但是當我查看packages目錄時;我看到System.Runtime.4.3.0 \ lib有net45net462目錄,但不是4.6.1或4.7(請參閱下面爲什麼我期望這樣做)。

,我已經嘗試了一些東西,都沒有奏效:

  • 儘管看到here是4.6.1支持網絡標準1.6,我曾嘗試 升級到4.7,但無濟於事。
  • 嘗試在web.config中設置程序集重定向。這稍微改變了錯誤,說它正在尋找4.0.0.0,然後重新開始,但它本質上是相同的錯誤。
  • 嘗試刪除軟件包目錄,看看我是否可以強制刷新(也試過System.Runtime Update-Package)。
  • 在搜索網頁時,我發現了一些類似的問題;一個在GitHub上(我似乎無法重新定位)意味着對VS2017的更新將解決該問題。

網上有足夠的最新資料,讓我覺得我不是唯一的人來體驗這一點;儘管我還沒有找到任何可能的原因的解釋。任何人都可以提供關於可能導致這種情況的解釋,或者我可以使用的任何診斷步驟?

+0

您使用的是什麼版本的visual studio? –

+0

Visual Studio 2017(15.4.1) –

+0

也許您可以創建最小化的項目來重現此問題並將其發佈到某處? – Evk

回答

2

.NET標準文檔herehere在涉及.NET Framework時存在衝突的信息。我懷疑後者是最新的。

基本上,它表明.NET Framework不支持.NET Standard 1.6,除非您安裝了.NET Core 2.0 SDK

或者,.NET Standard 1.5及以下版本在安裝.NET Core 1.0 SDK時受支持。

+0

我是/針對Net Core 2.0 SDK運行 - 所以這不是什麼原因造成的問題。 –

0

值得指出的是,NuGet將安裝最新的框架版本或低於您的項目的目標框架。這意味着,當它的目標是4.6.1時,引用的版本將是net45或4.5,從而使您一路下降到Net Standard 1.1。

理論上升級到4.7應該意味着它引用了net462,但它可能是如此的流血,以至於並非所有東西都能正常工作。你有沒有嘗試更新到4.6.2?

0

經過長時間的轉換過程後,我描述了here 我有經驗:您必須在您的主項目(在您的webapp .net 4.6.1)中安裝NuGet包NETStandard.Library。它會安裝大量的軟件包。

我使用NETStandard.Library版本1.6.1。

如果在netstandard代碼中使用System.Runtime.Serialization,則必須在主項目中安裝System.Runtime.Serialization.Primitives和System.Runtime.Serialization.Xml或.Json。

並且所有其他的netstandard項目引用也應在主項目中引用。

3

我有一個類似的問題,我通過從項目中刪除System.Runtime引用並通過Nuget(Net Standard compatible)安裝它來解決它。這不是唯一有問題的軟件包(其他例子,System.Net.Http)。另外,如果您的解決方案中有多個項目,則應在每個項目上安裝Net Standard。