У меня есть проект в моем решении, который начал свою жизнь как проект библиотеки C #. Он не имеет никакого интереса с точки зрения кода, он просто используется в качестве зависимости в других проектах в моем решении, чтобы обеспечить его сборку в первую очередь. Одним из побочных эффектов создания этого проекта является то, что создается общий файл AssemblyInfo.cs, который содержит номер версии, используемый другими проектами.
Я сделал это, добавив в файл .csproj следующее:
<ItemGroup>
<None Include="Properties\AssemblyInfo.Shared.cs.in" />
<Compile Include="Properties\AssemblyInfo.Shared.cs" />
<None Include="VersionInfo.targets" />
</ItemGroup>
<Import Project="$(ProjectDir)VersionInfo.targets" />
<Target Name="BeforeBuild" DependsOnTargets="UpdateSharedAssemblyInfo" />
Ссылочный файл VersionInfo.targets содержит следующее:
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!--
Some properties defining tool locations and the name of the
AssemblyInfo.Shared.cs.in file etc.
-->
</PropertyGroup>
<Target Name="UpdateSharedAssemblyInfo">
<!--
Uses the Exec task to run one of the tools to generate
AssemblyInfo.Shared.cs based on the location of AssemblyInfo.Shared.cs.in
and some of the other properties.
-->
</Target>
</Project>
Содержимое файла VersionInfo.targets может быть просто встроено в файл .csproj, но оно является внешним, потому что я пытаюсь превратить все это в шаблон проекта. Я хочу, чтобы пользователи шаблона могли добавить новый проект в решение, отредактировать файл VersionInfo.targets и запустить сборку.
Проблема в том, что изменение и сохранение файла VersionInfo.targets и перестройка решения не имеют никакого эффекта - файл проекта использует значения из файла .targets, какими они были при открытии проекта. Даже выгрузка и перезагрузка проекта не имеет никакого эффекта. Чтобы получить новые значения, мне нужно закрыть Visual Studio и снова открыть его (или перезагрузить решение).
Как настроить это так, чтобы конфигурация была внешней по отношению к файлу .csproj и не кэшировалась между сборками?