Visual Studio/MSBuild 将引用的 class 库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹

Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project

我有一个 class 库 ,许多其他 Web 应用程序项目都引用了它。它的 app.config 中有许多我希望在所有引用 Web 项目中使用的设置。当构建 class 库时,它将 app.config 复制到它自己的 bin 文件夹中作为 <assembly.name>.dll.config

如何确保将 <assembly.name>.dll.config 复制到我的引用 Web 应用程序项目的 每个 的 bin 文件夹中?


顺便说一句:手动将所有这些配置放入每个 Web 应用程序项目中是不切实际的。我可以通过在 bin 文件夹中查找 <assembly.name>.dll.config 来读取文件,并从那里提取设置。我已经可以做到这一点,所以这不是问题 - 我只需要确保文件在那里供阅读

这可以在没有第 3 方工具的情况下通过将以下内容添加到 class 库的项目文件来实现,assembly.name.csproj:

// Find this <Import> element for Microsoft.CSharp.targets
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
// Add this <ItemGroup> element immediately after
<ItemGroup>
    <Content Include="app.config">
        <Link>$(TargetName).dll.config</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

这会导致 app.config 被复制到引用它的项目 <assembly.name>.dll.config。这很好,因为您只需要配置一个 .csproj 文件,效果就会级联到所有引用项目。

Visual Studio 2015 年及更早

对于 Visual Studio 2015,我使用的是@theyetiman 的解决方案(参见 ):

<ItemGroup>
  <None Include="app.config" />
</ItemGroup>
<ItemGroup>
  <None Include="app.config">
    <Link>$(TargetFileName).config</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </None>
</ItemGroup>

Microsoft.CSharp.targets 的导入已经存在。)

Visual Studio 2017

在我的实验中,Visual Studio 2017 似乎开箱即用地处理配置文件。无需手动修改项目文件。