Проект не компилируется после обновления с Visual Studio 2017 до 2019 - PullRequest
1 голос
/ 11 февраля 2020

Я не могу понять предупреждения и ошибки от 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". Есть предупреждение «1005» и другое о конфликте между «1006» и ссылкой без версии. Но откуда он смотрит на 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, что явно неприемлемо способ продолжить.

Ответы [ 2 ]

2 голосов
/ 11 февраля 2020

Мне кажется, что я вспомнил нечто подобное, когда я обновил проект F # с VS2015 до 2017 года.

Решением было обновить версию среды выполнения F # (FSharp.Core.dll) в свойствах проекта.

Рассматривая .fsproj для. NET Core 3.0 F # проекта: среда выполнения F # на самом деле не указана, поэтому должна быть неявная зависимость: возможно, удаление также будет работать.

1 голос
/ 11 февраля 2020

Шаг 0

Я восстановил старый коммит моего проекта, чтобы лучше описать исходную ситуацию и отследить все шаги для ее решения. Перед выполнением следующих 2 операций мне пришлось обновить Nuget с FSharp.Core 4.6 до 4.7, для проблемы, указывающей c на WebSharper: сценарии не создавались.

Шаг 1

Мне пришлось отредактировать файл .proj, чтобы удалить несколько опорных строк, вроде дублированных. Вот пример для 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, но эти две операции, по-видимому, решили мою проблему.

...