Как я могу настроить таргетинг в проекте VS2010 C # на сборку MSBuild из VS2008

#visual-studio-2008 #visual-studio-2010 #msbuild

#visual-studio-2008 #visual-studio-2010 #msbuild

Вопрос:

Я разработал инструмент, который я использую для создания других файлов решений, и в случае успеха затем запускаю выходные данные. Инструмент изначально был собран с помощью VS2008, и файлы решений, которые должны быть собраны, также находятся в VS2008. Чтобы создать файлы решения во время выполнения, я добавил ссылки на Microsoft.Build.Движок и Microsoft.Build.Сборки фреймворка, и пока все так хорошо.

Недавно я был вынужден перенести свое основное решение на VS2010, но вспомогательные решения, которые должны быть созданы во время выполнения, на данный момент должны быть сохранены в VS2008. Просто чтобы добавить еще немного веселья, решения VS2008 содержат только проекты на C (которые, как всем известно, конвертируются в формат vcxproj в VS2010).

Проблема, с которой я столкнулся, заключается в том, что я не могу загрузить версии 3.5 упомянутых сборок. Несмотря на все мои усилия во время выполнения, она всегда загружает их версию 4.0. Это приводит к нежелательному эффекту, заключающемуся в том, что при попытке собрать решения VS2008 я получаю сообщение об ошибке: The project file "bla bla bla.vcproj" is in the ".vcproj" file format, which MSBuild no longer supports. Please convert the project by opening it in the Visual Studio IDE or running the conversion tool, or use MSBuild 3.5 or earlier to build it.

Проект C # со ссылкой на сборки MSBuild настроен с помощью targetFramework 3.5, и ссылки на сборки выглядят следующим образом:

 <Reference Include="Microsoft.Build.Engine, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
</Reference>
<Reference Include="Microsoft.Build.Framework, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
  <SpecificVersion>True</SpecificVersion>
</Reference>
  

Я также попытался установить для engine DefaultToolsVersion значение 3.5, но это тоже не помогло.

Я пытаюсь избежать вызова точной версии MSBuild, которую я хочу, запуская новый процесс и отправляя аргументы в командную строку, потому что это потребовало бы дополнительной работы по регистрации регистратора и синхронизации сообщений, чтобы мое основное приложение могло узнать, удалась ли сборка, и в этом случае запустить вывод. Я действительно надеюсь, что это не единственный путь.

Мы действительно ценим любые идеи, решения или помощь любого рода. Заранее спасибо

Ответ №1:

Наконец-то мне удалось заставить ее работать. Просто для справки, если случайно кто-нибудь столкнется с той же проблемой, проблема заключалась в другом проекте в моем решении (не в том, который использует MSBuild), все еще нацеленном на framework 4, из-за чего моя среда выполнения была 4.0 вместо 3.5