Немного улучшенная версия / подход заключается в использовании следующего в общем файле .targets:
<!-- Establish the proper $(CPPTasks) location -->
<Choose>
<When Condition=" '_$(VisualStudioVersion)'=='_11.0' " >
<PropertyGroup>
<CPPTasks>V110\Microsoft.Build.CPPTasks.Common.v110.dll</CPPTasks>
</PropertyGroup>
</When>
<Otherwise>
<PropertyGroup>
<CPPTasks>Microsoft.Build.CPPTasks.Common.dll</CPPTasks>
</PropertyGroup>
</Otherwise>
</Choose>
Тогда в вашем .csproj вы можете сделать следующее:
<UsingTask TaskName="XSD" AssemblyFile="$(VCTargetsPath)$(CPPTasks)" />
Обратите внимание, что это было проверено в VS2010, VS2011, VS2013 (имена DLL переключаются назад и вперед в зависимости от установленной версии VS.: (
Улучшение состоит в том, что только в одном месте содержится логика для правильного пути и имени DLL, а не отдельные файлы .csproj.