Первоначально мы нашли эту проблему в сложном решении, но теперь я могу воспроизвести ее и в фиктивном проекте.
Если я создаю проект в версии VS2012 premium (обновление 4) и добавлю сборку подделок для одной из ссылок, кажется, что проект всегда будет перестраиваться независимо от того, что будет изменено. То есть Я создаю проект, а затем снова нажимаю кнопку сборки, что приведет к восстановлению проекта.
Включение информации о диагностической сборке кажется, что основной причиной проблемы является то, что инструмент, компилирующий файл .fakes, касается файла .Fakes.dll, поэтому VS думает, что что-то изменилось:
1>Using "Touch" task from assembly "Microsoft.Build.Tasks.v4.0, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a".
1>Task "Touch" (TaskId:11)
1> Task Parameter:
1> Files=
1> D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.dll
1> D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll
1> D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.fakesconfig
1> D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig (TaskId:11)
1> Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.dll". (TaskId:11)
1> Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll". (TaskId:11)
1> Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\mscorlib.4.0.0.0.Fakes.fakesconfig". (TaskId:11)
1> Touching "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.fakesconfig". (TaskId:11)
1>Done executing task "Touch". (TaskId:11)
[...]
1>Input file "D:\work\Ch24_2014_PreEC\UnitTestProject1\FakesAssemblies\System.4.0.0.0.Fakes.dll" is newer than output file "obj\Debug\UnitTestProject1.pdb".
Пожалуйста, сообщите, что я делаю неправильно и как обойти это, чтобы проект не перестраивался избыточно все время.
Заранее спасибо
Edited
Для пояснения здесь приведены шаги по воспроизведению проблемы:
- Создайте проект С# по вашему выбору (я пробовал unit test и консольное приложение)
- Добавьте сборку подделок на одну из ссылочных сборок (я использовал систему в приведенном выше примере)
- Постройте проект
- Создайте его снова (не перестраивайте)
Обратите внимание, что вам не нужно добавлять в решение одну строку кода.