我有一个包含两个可执行项目的解决方案。
Main.exe
取决于Subordinate.exe
。
这些项目都有App.config
个文件,所以在各自的输出目录中,我有Main.exe.config
和Subordinate.exe.config
。
当我构建Main.exe
时,Subordinate.exe
被复制到Main的输出目录中,但Subordinate.exe.config
不是。
是否有标准方法告诉Visual Studio执行此操作?
答案 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)' < '15.0'">
<None Include="app.config">
<Link>$(TargetFileName).config</Link>
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>