App.config для дочернего проекта не копируется в вывод - PullRequest
19 голосов
/ 17 января 2012

У меня есть решение с двумя исполняемыми проектами.

Main.exe зависит от Subordinate.exe.

В обоих проектах есть App.config файлы, поэтому в соответствующих выходных каталогах у меня есть Main.exe.config и Subordinate.exe.config.

Когда я собираю Main.exe, Subordinate.exe копируетсяв выходной каталог Main, но Subordinate.exe.config нет.

Существует ли стандартный способ указать Visual Studio сделать это?

Ответы [ 3 ]

14 голосов
/ 13 февраля 2013

Другой способ, который я нашел, - это добавить файл app.config в виде связанного файла в зависимый проект, например, здесь вы должны добавить ссылку на файл app.config файла Subordinate.exe в проект Main.exe и настроить его для копирования в выходной каталог при сборке. Затем вы можете изменить имя файла, который копируется в выходной каталог Main.exe во время сборки, отредактировав элемент <Link> в файле проекта, например:

<None Include="..\Subordinate.ProjectFolder\app.config">
  <Link>Subordinate.exe.config</Link>
  <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>

Это та же проблема, что вам приходится жестко кодировать имя сгенерированного файла конфигурации, но это не хуже, чем подход AfterBuild, и я считаю этот метод немного более прозрачным, и он удаляет зависимость порядка сборки вопрос, который вы упомянули.

10 голосов
/ 17 января 2012

Щелкните правой кнопкой мыши по проекту Main и выберите Edit Project File.Добавить событие AfterBuild:

  <Target Name="AfterBuild">
    <Copy SourceFiles="..\Subordinate\bin\$(Configuration)\Subordinate.exe.config" 
          DestinationFolder="$(TargetDir)" />
  </Target>
1 голос
/ 07 апреля 2017

Посмотрите на этот ответ (основываясь на работе @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)' &lt; '15.0'">
  <None Include="app.config">
    <Link>$(TargetFileName).config</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...