У меня есть проект в моем решении, который начал работать как проект библиотеки С#. Он не интересовался им с точки зрения кода, он просто используется как зависимость в других проектах в моем решении, чтобы обеспечить его создание в первую очередь. Одним из побочных эффектов построения этого проекта является создание общей сборки 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, а не кэширована между сборками?