App.config для дочернего проекта не копируется на вывод
У меня есть решение с двумя исполняемыми проектами.
Main.exe
зависит от Subordinate.exe
.
Эти проекты имеют файлы App.config
, поэтому в их соответствующих каталогах вывода у меня есть Main.exe.config
и Subordinate.exe.config
.
Когда я создаю Main.exe
, Subordinate.exe
копируется в главную директорию вывода, но Subordinate.exe.config
нет.
Есть ли стандартный способ сообщить Visual Studio об этом?
Ответы
Ответ 1
Щелкните правой кнопкой мыши по проекту Main
и выберите Edit Project File
. Добавьте событие AfterBuild
:
<Target Name="AfterBuild">
<Copy SourceFiles="..\Subordinate\bin\$(Configuration)\Subordinate.exe.config"
DestinationFolder="$(TargetDir)" />
</Target>
Ответ 2
Другим способом, который я нашел, является добавление файла app.config в качестве связанного файла в зависимый проект, например. здесь вы должны добавить ссылку на Subordinate.exe app.config в проект Main.exe и установить ее при копировании в выходной каталог. Затем вы можете изменить имя файла, который скопирован в каталог вывода Main.exe во время сборки, отредактировав элемент <Link>
в файле проекта, например:
<None Include="..\Subordinate.ProjectFolder\app.config">
<Link>Subordinate.exe.config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
Это имеет ту же проблему, что и для жесткого кодирования имени сгенерированного файла конфигурации, но не хуже, чем подход AfterBuild
, и я нахожу этот метод немного более прозрачным и удаляет зависимость порядка сборки вы упомянули.
Ответ 3
Посмотрите этот ответ (на основе работы @theyetiman). Это требует в основном модификации проекта, к которому принадлежит файл app.config
. Проекты потребления остаются неизмененными.
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup>
<None Include="app.config">
<Link>$(TargetFileName).config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
Также обратите внимание, что с Visual Studio 2017 эта модификация больше не нужна. Если вы откроете решение с проектом, содержащим описанное выше решение, в окне ошибок отображается предупреждение, подобное приведенному ниже:
Файл app.config не может быть добавлен в проект. Невозможно добавить ссылку на файл... \app.config. Этот файл находится внутри дерева каталога проекта.
Добавьте условие сравнения $(VisualStudioVersion)
, чтобы избежать этого предупреждения и сохранить обратную совместимость:
<ItemGroup>
<None Include="app.config" />
</ItemGroup>
<ItemGroup Condition="'$(VisualStudioVersion)' < '15.0'">
<None Include="app.config">
<Link>$(TargetFileName).config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>