簡體   English   中英

從 Visual Studio 2017 升級到 2019 后項目無法編譯

[英]Project doesn't compile after upgrading from Visual Studio 2017 to 2019

我無法理解 Visual Studio 2019 的警告和錯誤。從 Visual Studio 2017 升級后,似乎所有對項目包的引用都不再有效。我編譯時有日志的初始行解決方案。

1>------ Build started: Project: ClientServerUpload, Configuration: Debug Any CPU ------
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "System.Text.Encoding.CodePages". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
1>C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2106,5): warning MSB3243: No way to resolve conflict between "System.Text.Encoding.CodePages, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "System.Text.Encoding.CodePages". Choosing "System.Text.Encoding.CodePages, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" arbitrarily.
1>      No way to resolve conflict between "FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "FSharp.Core, Version=4.3.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" arbitrarily.
1>      No way to resolve conflict between "FSharp.Core, Version=4.4.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" and "FSharp.Core, Version=4.4.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a". Choosing "FSharp.Core, Version=4.4.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" arbitrarily.
1>      Consider app.config remapping of assembly "FSharp.Core, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" from Version "4.4.3.0" [] to Version "4.7.0.0" [\\mypath\packages\FSharp.Core.4.7.0\lib\net45\FSharp.Core.dll] to solve conflict and get rid of warning.

上面還有很多其他的行,但無論如何我看不出哪里出了問題。 例如,我選擇第一條消息,關於"System.Text.Encoding.CodePages" 有一個警告說"Could not locate the assembly" ,另一個警告是Version=4.1.3.0和沒有版本的參考之間的沖突。 但是它從哪里看Version=4.1.3.0 在 pacakge.config 中有一行:

 <package id="System.Text.Encoding.CodePages" version="4.7.0" targetFramework="net461" />

如果我編輯 .proj 文件,我會看到:

<Reference Include="System.Text.Encoding.CodePages">      <HintPath>..\packages\System.Text.Encoding.CodePages.4.7.0\lib\net461\System.Text.Encoding.CodePages.dll</HintPath>
</Reference>

並且HintPath確實存在。 對所有其他消息和錯誤也有類似的疑問。 再舉一個例子,為什么要搜索FSharp.Core, Version=4.4.1.0 再次我有

  <ItemGroup>
    <Reference Include="FSharp.Core">
      <HintPath>..\packages\FSharp.Core.4.7.0\lib\net45\FSharp.Core.dll</HintPath>
    </Reference>

在 proj 文件和 packages.config 中

  <package id="FSharp.Core" version="4.7.0" targetFramework="net461" />

我知道的所有配置對我來說似乎都是正確的,整個解決方案在 Visual Studio 2017 中完全沒問題。該項目是用 WebSharper 模板構建的,我不知道這是否/如何相關,但是我也重新安裝了 WebSharper VSIX,升級到 Visual Studio 2019 后,我沒有收到任何錯誤。 除了刪除和恢復所有包、查看 .proj 文件、清理和重建解決方案之外,我還有什么其他選擇? 我還應該看什么? 我知道我可以將重新映射添加到 Web.config,但我認為這不是解決方案(甚至不是解決方法)。 對於您的信息,幾個小時后,我設法通過許多(奇怪的)重新映射行並通過手動(!)將一些文件(包括FSharp.Core )從包復制到 bin 文件夾,這顯然是不可接受的方式進行。

當我將一個 F# 項目從 VS2015 升級到 2017 時,我似乎記得類似的事情。

解決方案是在項目屬性中更新 F# 運行時 ( FSharp.Core.dll ) 的版本。

查看.fsproj以獲取 .NET Core 3.0 F# 項目:實際上並未列出 F# 運行時,因此必須是隱式依賴項:也許刪除它也可以。

步驟 0

我已經恢復了我的項目的舊提交,以更好地描述原始情況並跟蹤解決它的所有步驟。 在以下 2 個操作之前,我不得不從 FSharp.Core 4.6 nuget 升級到 4.7,針對特定於 WebSharper 的問題:未生成腳本。

第1步

我不得不編輯 .proj 文件以刪除一些參考線,有點重復。 這是FSharp.Core一個示例,但我對許多其他人也做了同樣的事情(我不知道這個問題的FSharp.Core是什么,但刪除這些行似乎對我FSharp.Core

<Reference Include="FSharp.Core">
  <HintPath>..\packages\FSharp.Core.4.7.0\lib\net45\FSharp.Core.dll</HintPath>
</Reference>
<Reference Include="FSharp.Core" />

在上面的例子中,我刪除了最后一行(以及在包含相同包版本的標簽下沒有版本引用的所有其他類似行)

第2步

然后我將所有<dependentAssembly>從 Visual Studio 輸出復制並粘貼到 Web.config。 我再次不明白它們比 Visual Studio 2017 所需的要多得多,但這兩個操作顯然解決了我的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM