Сборка не работает из VisualStudio, но в порядке из msbuild - PullRequest
0 голосов
/ 10 февраля 2012

Из нового шаблона консольного приложения в Visual Studio я отредактировал .csproj, чтобы создать другой проект, подобный этому:

...
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Target Name="BeforeBuild">
  <MSBuild Projects=".\other.mproj"/>
</Target>    
...

Где other.mproj:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="Build">

   <Target Name="Build">
       <Message Text="kikou" />     
   </Target>

</Project>

Через некоторое время я обнаружил, что изменение содержимого other.mproj (например, путем внесения ошибок или изменения текста kikou на что-то другое) не будет приниматься во внимание, если не выгрузить / перезагрузить проект в Visual Studio.

Сборка из командной строки с помощью 'msbuild myproj.csproj' немедленно обнаруживает изменения в 'other.mproj'.Так что все выглядит так, будто visual studio работает с кэшированной версией файла other.mproj.

Почему Visual Studio кэширует этот другой скрипт (который даже не включен в проект) и как я могу решить эту проблему?

Обновление: я также пробовал это UseHostCompilerIfAvailable , это не работает.


NB1: я не добавил other.mproj в качестве ссылки на проект в .csproj, потому что это вообще не проект .NET(он просто создает файлы ресурсов для .csproj из других входов перед сборкой)

NB2: я использую VS2010 (10.0.10219.1SP1Rel + MSBuild 4.0.30319.1)

1 Ответ

1 голос
/ 12 февраля 2012

Visual Studio кэширует все файлы MSBuild, это сделано из соображений производительности. Вы не сможете использовать MSBuild только для этого. возможно возможно добиться этого через надстройку VS, но я не уверен на 100% в этом.

...