Это очень распространенная ошибка. Пакеты Nuget являются наиболее вероятными нарушителями проблем, log4net и NewtonSoft.Json находятся на вершине этого списка. Современные версии MSBuild знают, как это решить. Что-то, что вы можете увидеть при использовании «Инструменты»> «Параметры»> «Проекты и решения»> «Сборка и запуск»> «Вывод сборки проекта MSBuild» verbosity = Подробно.
Я покажу, как он выглядит на VS2015, воспроизводя ваш точный проблемный сценарий.Он начинает становиться интересным в задаче ResolveAssemblyReference:
1>Task "ResolveAssemblyReference"
...
1> Primary reference "B, Version=1.1.32.0, Culture=neutral, PublicKeyToken=null".
1> Resolved file path is "c:\projects2\BCopy\bin\Debug\B.dll".
1> Reference found at search path location "{HintPathFromItem}".
1> Found related file "c:\projects2\BCopy\bin\Debug\B.pdb".
1> The ImageRuntimeVersion for this reference is "v4.0.30319".
1> Primary reference "A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null".
1> Resolved file path is "c:\projects2\A\bin\Debug\A.dll".
1> Reference found at search path location "{HintPathFromItem}".
1> Found related file "c:\projects2\A\bin\Debug\A.pdb".
1> The ImageRuntimeVersion for this reference is "v4.0.30319".
И куча больше для .NET Framework сборок. К концу этой задачи он замечает, что А имеет зависимость от новой версии B:
1> Dependency "B, Version=1.1.39.0, Culture=neutral, PublicKeyToken=null".
1> Resolved file path is "c:\projects2\B\bin\Debug\B.dll".
1> Reference found at search path location "c:\projects2\B\bin\Debug".
1> For SearchPath "c:\projects2\B\bin\Debug".
1> Considered "c:\projects2\B\bin\Debug\B.winmd", but it didn't exist.
1> Required by "A, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL".
1> Found related file "c:\projects2\B\bin\Debug\B.pdb".
1> This reference is not "CopyLocal" because it conflicted with another reference with the same name and lost the conflict.
1> The ImageRuntimeVersion for this reference is "v4.0.30319".
1> There was a conflict between "B, Version=1.1.32.0, Culture=neutral, PublicKeyToken=null" and "B, Version=1.1.39.0, Culture=neutral, PublicKeyToken=null".
1> "B, Version=1.1.32.0, Culture=neutral, PublicKeyToken=null" was chosen because it was primary and "B, Version=1.1.39.0, Culture=neutral, PublicKeyToken=null" was not.
1> References which depend on "B, Version=1.1.32.0, Culture=neutral, PublicKeyToken=null" [c:\projects2\BCopy\bin\Debug\B.dll].
1> c:\projects2\BCopy\bin\Debug\B.dll
1> Project file item includes which caused reference "c:\projects2\BCopy\bin\Debug\B.dll".
1> B, Version=1.1.39.0, Culture=neutral, processorArchitecture=MSIL
1> References which depend on "B, Version=1.1.39.0, Culture=neutral, PublicKeyToken=null" [c:\projects2\B\bin\Debug\B.dll].
1> c:\projects2\A\bin\Debug\A.dll
1> Project file item includes which caused reference "c:\projects2\A\bin\Debug\A.dll".
1> A, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL
1>Done executing task "ResolveAssemblyReference".
Обратите внимание, как он пытается решить, следует ли использовать версию 1.1.32.0 или 1.1.39.0. Ему нравится старая версия лучше, поскольку она является «основной ссылкой». Другими словами, ваш проект ссылается на него, а значение 1.1.39.0 менее важно, поскольку оно является косвенной ссылкой от A.
Проект строит чистую, без жалобы. Почему это не работает для вас, совершенно неясно, довольно важно назвать вашу версию VS. Я точно не помню, когда эта функция была добавлена, это было давно. Где-то вокруг VS2010 или VS2012.
Итак, постарайтесь, чтобы сравнить трассировку сборки, которую вы получаете на своей машине, с тем, что я разместил. Если это просто простая старая версия VS-версии, то вы, конечно, будете намного опережать ее.
У вас есть свойство «Специфическая версия», равное true в вашей ссылке на сборку? (нажмите «свойства» в ссылке для проверки) –
Нет, что установлено в false, проблема заключается в косвенных ссылках. – Lee