子项目的App.config未被复制到输出

时间:2012-01-17 18:07:47

标签: visual-studio visual-studio-2010 app-config

我有一个包含两个可执行项目的解决方案。

Main.exe取决于Subordinate.exe

这些项目都有App.config个文件,所以在各自的输出目录中,我有Main.exe.configSubordinate.exe.config

当我构建Main.exe时,Subordinate.exe被复制到Main的输出目录中,但Subordinate.exe.config不是。

是否有标准方法告诉Visual Studio执行此操作?

3 个答案:

答案 0 :(得分:14)

我找到的另一种方法是将app.config文件作为链接文件添加到依赖项目,例如在这里,您可以将Subordinate.exe的app.config链接添加到Main.exe的项目中,并将其设置为在构建时复制到输出目录。然后,您可以通过编辑项目文件中的<Link>元素来更改在构建时复制到Main.exe输出目录的文件的名称,如:

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

这有同样的问题,你必须硬编码生成的配置文件的名称,但这并不比AfterBuild方法更糟糕,我发现这个方法更透明,它删除了构建 - 您提到的订单依赖问题。

答案 1 :(得分:10)

右键单击Main项目,然后选择Edit Project File。添加AfterBuild事件:

  <Target Name="AfterBuild">
    <Copy SourceFiles="..\Subordinate\bin\$(Configuration)\Subordinate.exe.config" 
          DestinationFolder="$(TargetDir)" />
  </Target>

答案 2 :(得分:1)

看看this answer(根据@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>