Я не знаю, как можно отключить кэш VS, однако у меня может быть обходной путь, который позволит вам редактировать цель сборки без перезагрузки решения.
Вы можете использовать задачу MSBuild в вашем файле proj для вызова цели-оболочки, которая копирует ваш файл CopyDependencies.target в CopyDependencies. [RandomNumber] .target, затем вызывает вашу цель CopyDependencies во вновь созданном файле и, наконец, удаляет ее.
Это заставит VS перезагружать цель при каждом вызове, так как имя файла отличается.
Вот пример:
myProject.proj
Добавьте это к цели AfterBuild:
<MSBuild Projects="Wrapper.target" Targets="MyWrappedTarget" UnloadProjectsOnCompletion="true"/>
Wrapper.target
Здесь у нас есть цель, которая - во время сборки - скопирует настоящий целевой файл и вызовет в нем нужную цель сборки (я использовал встроенную задачу c #, которая доступна только в MSBuild 4.0):
<UsingTask TaskName="RandomNumber" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
<ParameterGroup>
<Number ParameterType="System.Int32" Output="true"/>
</ParameterGroup>
<Task>
<Code Type="Fragment" Language="cs">
<!-- CDATA -->
Random rndGenerator = new Random();
Number = rndGenerator.Next(Int32.MaxValue);
<!-- CDATA -->
</Code>
</Task>
</UsingTask>
<Target Name="MyWrappedTarget">
<Message Text="MyWrappedTarget target called"/>
<RandomNumber>
<Output TaskParameter="Number" PropertyName="FileNumber"/>
</RandomNumber>
<PropertyGroup>
<CopiedTarget>inner.test.$(FileNumber).target</CopiedTarget>
</PropertyGroup>
<Copy SourceFiles="inner.test.target" DestinationFiles="$(CopiedTarget)"/>
<MSBuild Projects="$(CopiedTarget)" Targets="_innerTestTarget"/>
<Delete Files="$(CopiedTarget)"/>
</Target>
inner.test.target
Содержит реальную цель сборки, которую вы хотите выполнить, в данном примере это простая копия файла.
<Target Name="_innerTestTarget">
<Message Text="This is a inner test text message"/>
<Copy SourceFiles="x.txt" DestinationFiles="x1.txt"/>
</Target>
Это не готово к производству, но, надеюсь, иллюстрирует мою точку зрения.
Имея этот (немного запутанный) процесс, вы можете изменить файл inner.test.target, не перезагружая решение в VS.