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

时间:2016-01-15 12:44:35

标签: c# .net visual-studio msbuild app-config

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

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

  • 默认情况下,Visual Studio / MSBuild似乎不会这样做。
  • 更改Copy to Output DirectoryBuild Action(任意组合)不起作用。
  • SlowCheetah VS扩展似乎做了我想要的配置转换过程的意外副作用,但我想这样做 没有 任何第三方扩展

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

2 个答案:

答案 0 :(得分:11)

通过将以下内容添加到类库的项目文件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文件,效果就会级联到所有引用项目。

答案 1 :(得分:2)

Visual Studio 2015及更早版本

对于Visual Studio 2015,我使用@theyetiman的解决方案(请参阅此answer):

<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似乎开箱即用地处理配置文件。不需要手动修改项目文件。