вторник, 19 февраля 2013 г.

Citrix Streaming клиент и некомпилрующийся проект в Visual Studio 2012

В обед на работе "озарила" идея, которую захотелось сразу проверть в своем проекте эмуляторе.  Для проверки - собираю проект студией, стоящей на рабочем ПК, и получаю странные ошибки:

15>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB4018: The "CL" task failed unexpectedly.
15>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB4018: System.AggregateException: One or more errors occurred. ---> System.ArgumentOutOfRangeException: Not a valid Win32 FileTime.
15>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB4018: Parameter name: fileTime
15>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(249,5): error MSB4018:    at System.DateTime.FromFileTimeUtc(Int64 fileTime)

либо:

1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): warning MSB6008: Forcing a rebuild of all sources due to an error with the tracking logs. Not a valid Win32 FileTime.
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): warning MSB6008: Parameter name: fileTime
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): error MSB6001: Invalid command line switch for "link.exe". Not a valid Win32 FileTime.
1>C:\Program Files\MSBuild\Microsoft.Cpp\v4.0\V110\Microsoft.CppCommon.targets(611,5): error MSB6001: Parameter name: fileTime

Ошибки плавают, возникают то в одном, то в другом месте, но во всех них идет жалоба на "неправильный" FileTime. Причем, Rebuild All - работает, "поломалась" только обычная компиляция.
Как оказалось виноват клиент Citrix (вот на что бы никогда не подумал - так именно на него). Подробнее тут:
http://connect.microsoft.com/VisualStudio/feedback/details/635940/invalid-command-line-switch-for-link-exe-when-building

Мы как раз на работе "играемся" с стримингом приложений цитрикса, чтобы упростить контроль за использованием ПО на рабочих станциях. Я на днях решил протестировать как оно работает на себе, поставил стриминг клиента - и поплатился.
Вылечилось удалением streaming клиента citrix. Вариант с правкой файлов проекта не проверял, так как у меня их более 70 штук в эмуляторе.