«Рассмотрите возможность переназначения сборки app.config …» предупреждение в F#

#f# #compiler-warnings

#f# #предупреждения компилятора

Вопрос:

После того, как я установил VS11, я начал получать следующую ошибку:

Рассмотрите возможность переназначения app.config сборки «FSharp.Core, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a» из версии «2.0.0.0» [C:Program Файлы (x86)Ссылка AssembliesMicrosoftFSharp2.0Runtimev2.0FSharp.Core.dll ] до версии «4.0.0.0» [C:Program Файлы (x86)Ссылка AssembliesMicrosoftFSharp2.0Runtimev4.0FSharp.Core.dll ] разрешить конфликт и избавиться от предупреждения. C:WindowsMicrosoft.NETFrameworkv4.0.30319Microsoft.Common.targets (1490,5): предупреждение MSB3247: обнаружены конфликты между разными версиями одной и той же зависимой сборки.

Что именно я должен делать? Я понятия не имею, как выполнить такое переназначение.

Ответ №1:

Я думаю, что ниже приведен пример app.config, который выполняет то, что предлагается. Однако, что есть в вашем проекте, и что такое FSharp.Ссылка на ядро есть? Вы ориентируетесь на .Net 4.5 или 4.0 или что? Ссылается ли этот проект на какую-то более старую библиотеку F #? Обычно это происходит потому, что два проекта ссылаются на разные версии FSharp.Core.dll , например, проверьте <Reference> узлы в файлах .fsproj.

 <?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
          <assemblyIdentity name="FSharp.Core" publicKeyToken="b03f5f7f11d50a3a"
                            culture="neutral"/>
<!--      <bindingRedirect oldVersion="0.0.0.0-2.9.9.9" newVersion="4.3.0.0"/>  -->
          <bindingRedirect oldVersion="2.0.0.0" newVersion="4.0.0.0"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
 

Комментарии:

1. Версии FSharp нет. Ядро, упомянутое в fsproj. Вот ссылка ( dl.dropbox.com/u/4571/send.zip ) к файлам fsproj. Я искал в них, но не увидел ничего странного. Я ориентируюсь на .NET 4.0 CL, и я не знаю о ссылках на что-либо старое, но это может быть 🙂

2. У вас есть какие-либо дополнительные предложения?

3. ДА. Создайте новый проект F # с помощью VS11 и проверьте его файл .fsproj. Теперь измените существующие проекты, удалив <Import> строки из целевых файлов и заменив их строками, которые видны во вновь созданном проекте VS11. Кроме того, вновь созданный проект будет иметь явные <Reference> s для mscorlib и FSharp.Core. Добавьте их в свои проекты, если их там нет (с желаемой версией / таргетингом, если это необходимо). Я думаю, тогда все будет работать.

4. Если я это сделаю, будет ли решение работать на компьютерах без VS11? Я сотрудничаю в этом проекте с одним коллегой, у которого на его компьютере не установлен VS11.

5. Этот инструмент помог мне диагностировать аналогичную проблему: mikehadlow.blogspot.com/2011/02 /…

Ответ №2:

та же ошибка, связанная с Json.Net

В файле проекта у меня было

 <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
   <SpecificVersion>False</SpecificVersion>
   <HintPath>..packagesNewtonsoft.Json.6.0.1libnet45Newtonsoft.Json.dll</HintPath>
</Reference>
 

и

 <ItemGroup>
   <Reference Include="Newtonsoft.Json">
      <HintPath>..packagesNewtonsoft.Json.5.0.6libnet45Newtonsoft.Json.dll</HintPath>
   </Reference>
</ItemGroup>
 

Удаление старого решило проблему.

Ответ №3:

Если вы выполнили обновление хорошо, такой проблемы не должно быть… Если вы не используете какую-либо стороннюю библиотеку, которая использует старый FSharp.Само ядро. В моем случае это делает FSharpPowerPack.

Поэтому вам нужно либо сначала обновить эту библиотеку, чтобы избавиться от этого сообщения.