#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.
Поэтому вам нужно либо сначала обновить эту библиотеку, чтобы избавиться от этого сообщения.