Проект не компилируется после обновления Visual Studio 2017 до 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, что явно неприемлемо продолжить.


person Giulio    schedule 11.02.2020    source источник


Ответы (2)


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

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

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

person Richard    schedule 11.02.2020
comment
Спасибо за вашу помощь. А пока я думаю, что нашел решение и отправлю его здесь через несколько минут. Может это что-то конкретное для меня, не знаю, все равно поделюсь - person Giulio; 11.02.2020

Шаг 0

Я восстановил старую фиксацию своего проекта, чтобы лучше описать исходную ситуацию и отслеживать все шаги по ее разрешению. Перед следующими двумя операциями мне пришлось выполнить обновление с FSharp.Core 4.6 до 4.7 из-за проблемы, характерной для 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, но эти две операции, по-видимому, решили мою проблему.

person Giulio    schedule 11.02.2020