При создании проекта C# есть ли способ скопировать файлы в выходной каталог только с конфигурацией отладки, а не с конфигурацией выпуска?
Пример проблемы, с которой я столкнулся: у меня есть два файла: config.json
и config.development.json
. Мое приложение загружается config.json
, если оно работает в режиме выпуска, и config.development.json
в режиме отладки (контролируется с помощью директив препроцессора). Я не особо возражаю, если config.json
включен при компиляции для отладки, но я хочу избежать распространения config.development.json
в выпуске, в идеале более чистым способом, чем удаление файла вручную или автоматически через конвейер CI/CD.
Глядя на окно «Свойства» в Visual Studio, кажется, что нет очевидного способа скопировать файлы в выходной каталог исключительно в конфигурации отладки. Я нашел бы инструкции о том, как попросить Visual Studio справиться с этим, приемлемыми, но решения, не зависящие от IDE, такие как изменения в файле .csproj
, вероятно, будут предпочтительнее для других читателей.
Нет необходимости создавать события. Элемент ItemGroup
в csproj может иметь условие. Вы можете поместить разные Content
или CopyToOutputDirectory
в разные группы вывода с разными условиями.
Вы можете отредактировать свой csproj
файл соответственно условному копированию. Для этого добавьте ItemGroup
к вашему csproj
, как показано ниже:
<ItemGroup Condition = "'$(Configuration)' == 'Debug'">
<None Update = "config.development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Наконец, ваш csproj
будет выглядеть примерно так:
<Project Sdk = "Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net5.0</TargetFramework>
</PropertyGroup>
<ItemGroup Condition = "'$(Configuration)' == 'Debug'">
<None Update = "config.development.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Update = "config.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
Вместо использования свойств файла скопируйте его через события сборки (после сборки). События не задаются для каждой конфигурации (отладка/выпуск), но вы можете использовать пакетный скрипт, который это делает. См. здесь: Как запускать события после сборки Visual Studio только для отладочной сборки.