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

12
我有一个类库,被许多其他Web应用程序项目引用。它在其app.config中有许多设置,我希望在所有引用的Web项目中使用这些设置。当构建类库时,它将app.config复制到其自己的bin文件夹中作为.dll.config。如何确保.dll.config被复制到每个引用的Web应用程序项目的bin文件夹中?Visual Studio/MSBuild默认似乎不会这样做。更改“复制到输出目录”或“生成操作”(任何组合)均无效。SlowCheetah VS扩展似乎通过其配置转换过程的意外副作用执行我想要的操作,但我不想使用任何第三方扩展程序。顺便说一句:在每个Web应用程序项目中手动放置所有这些配置是不切实际的。我可以通过在bin文件夹中查找.dll.config并从中提取设置来读取该文件。我已经能够做到这一点,所以这不是问题 - 我只需要确保文件将在那里供阅读。
2个回答

14

通过将以下内容添加到类库的项目文件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
我正在尝试将这个应用程序与网站项目一起使用,但它无法复制 *.dll.config 文件。 - CincauHangus
2
太棒了!我有一个带有对ConsoleApp的引用的WinFormsApp,我需要将ConsoleApp.exe.config文件复制到WinFormsApp输出文件夹中。我稍微修改了上面的代码<Link>$(TargetName).exe.config</Link>。(将“dll”更改为“exe”) - opewix
@cincua,对于网站项目我不太确定,抱歉。看起来适用于Web应用程序项目或WinFormsApp。也许您可以尝试创建一个Web应用程序项目来检查是否做错了什么,并确认是Web站点项目有问题? - theyetiman
1
这个很好用!顺便提一下:虽然通过替换现有的 app.config 元素已经可以工作,但是配置文件将不再在“解决方案资源管理器”中可见。因此,我保留了原始元素,并只添加了另一个带有 LinkCopyToOutputDirectory 子元素的元素。 - CodeFox
1
我最终得到了以下内容,适用于“exe”和“dll”程序集的“Link”元素:<Link>$(TargetFileName).config</Link>。 - CodeFox
显示剩余3条评论

4

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似乎可以直接按预期处理配置文件。不需要手动修改项目文件。


Visual Studio 2019似乎不能直接处理它。 - superninja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接