Я верю, что правильный ответ - использовать $(TargetDir)
против $(ProjectDir)$(OutDir)
в "copy To". Вы не хотите, чтобы упоминание $(ProjectDir)
было справа. Что, если ваш вывод находится за пределами вашей папки проекта, может быть даже другой компьютер. Кроме того, вместо изменения файла проекта в проекте XML, вы можете просто открыть свойства и в «событиях сборки» добавить это единственное событие
if $(ConfigurationName) == dev copy /y "$(ProjectDir)GLicense_dev" "$(TargetDir)GLicense"
if $(ConfigurationName) == stage copy /y "$(ProjectDir)GLicense_stage" "$(TargetDir)GLicense"
if $(ConfigurationName) == prod copy /y "$(ProjectDir)GLicense_prod" "$(TargetDir)GLicense"
другим способом (и это действительно решение Visual Studio, поскольку оно устраняет CMD / Пакетное кодирование. Недостатком в вашем случае является то, что у вас есть 3 разных файла с одинаковым именем в 3 разных папках), добавьте ваши 3 файла в проект как содержимое в 3 разных папках, но имя файла - одинаковое (GLicense
). И выберите «Копировать всегда» в действии сборки. Затем в файле проекта XML добавьте Condition=" '$(Configuration)' == 'dev'
к самому файлу, а не к группе свойств
<None Include="dev\GLicense" Condition=" '$(Configuration)' == 'dev'>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="stage\GLicense" Condition=" '$(Configuration)' == 'stage'>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Include="prod\GLicense" Condition=" '$(Configuration)' == 'prod'>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>