Używanie najnowszych wersji, często jeszcze nie oficjalnie wydanych ma oprócz niekwestionowanej radości z nowych ficzerów rownież i ciemną stronę. To się czasem coś wywali, coś nie działa etc. Projekt nad którym pracuje rozwijany jest już w VS2013 ale instalka jest buildowana w VS2012 – autor WiX-a jakoś nie spieszy się do wspierania VS2013 więc trzeba się w starej wersji babrać.

Teoretycznie projekty są zgodne, ale jeśli w solution założymy nowy projekt w VS2013 to VS2012 jakoś tego nie ogarnia i nie builduje wywalając bład:

The task factory „CodeTaskFactory” could not be loaded from the assembly „C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Build.Tasks.v4.0.dll”. Could not load file or assembly ‚file:///C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Build.Tasks.v4.0.dll’ or one of its dependencies. …..

i nie ma jak zbuildować całości. Mi pomagało przez jakiś czas – bardzo doraźnie wyłączenie nuget download missing packages:

nuget-off

Ale to jednak nie było sedno problemu. Jak download missing packages prestało działać, udało mi się dotrzeć do senda zła. Które siedziało w csproj. Wystarczy zmienić ToolsVersion w csproj na 4.0 i działa.

build-tools

Co ciekawe ten problem nie zawsze się pojawia. Gdyby jednak dopadł Ciebie to wiesz co robić. Może Ci pomoże. Jeszcze jedno miejsce, które może pomóc na przypadki uparto krytyczne to zmiana NuGet.targets (jeśli korzystasz z nugetów i masz włączony nuget restore

image

zmiana …Build.Tasks.v12.0.dll na v4.0.dll poprawia komfort życia 😉