2012-01-17 24 views
19

我有两个可执行项目的解决方案。子项目的App.config未复制到输出

Main.exe依赖于Subordinate.exe

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

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

有没有一种标准的方式来告诉Visual Studio做到这一点?

+2

的另一种方法是编辑父项目的csproj文件,然后在的PropertyGroup使用AllowedReferenceRelatedFileExtensions。在你的情况下,你会将.exe.config添加到允许的扩展名列表中。请参阅:https://stackoverflow.com/questions/9765686/include-referenced-projects-config-file/9769667#9769667 – 2015-01-20 17:09:09

回答

10

右键点击Main项目并选择Edit Project File。添加AfterBuild事件:

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

我已经试过这个,使用'PostBuildEvent',并发现它在第一次尝试构建时失败,然后成功进行第二次尝试。在我的* real *项目中发现,下属项目未被列为主项目的依赖项,因此它是在主项目之后构建的。一旦我正确建立了依赖关系,后构建事件就起作用了。** - **无论如何,我希望得到一个不需要AfterBuild/PostBuildEvent的答案,但鉴于没有任何答案,我将其标记为答案(因为这是我所做的)。 – Mud 2012-01-17 19:50:10

+1

我会不惜一切代价避免'PostBuildEvent'。 'AfterBuild'是最好的,因为它至少是可以控制和追踪的。 – KMoraz 2012-01-17 22:15:48

+0

我只想补充一点,在VS2012中,配置宏(例如Debug/Release)是$(ConfigurationName),而不是$(Configuration)。 另外,您可能需要包含平台规范(例如x86/x64)。 您可能最终需要编写它: 2015-03-12 17:52:39

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

有什么办法让文件出现与链接相同的名称? – Zee 2014-11-04 13:37:03

+0

作为接受的解决方案的最佳解决方案不适用于构建服务器方案:) – suryakiran 2016-04-05 09:31:30

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> 
相关问题