Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹
Posted
技术标签:
【中文标题】Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹【英文标题】:Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project 【发布时间】:2016-04-21 01:34:11 【问题描述】:我有一个被许多其他 Web 应用程序项目引用的类库。它在其app.config
中有许多设置,我希望在所有引用 Web 项目中使用这些设置。构建类库时,它会将app.config
复制到自己的bin
文件夹中作为<assembly.name>.dll.config
。
如何确保将<assembly.name>.dll.config
复制到我的每个 引用Web 应用程序项目的bin 文件夹中?
Visual Studio / MSBuild 默认似乎不这样做。
更改 Copy to Output Directory
或 Build Action
(任意组合)不起作用。
SlowCheetah VS 扩展似乎可以做我想做的事情,这是其配置转换过程的意外副作用,但我想这样做 没有任何第 3 方扩展.
顺便说一句:手动将所有这些配置放入每个 Web 应用程序项目中是不切实际的。我可以通过在 bin 文件夹中查找 <assembly.name>.dll.config
来读取文件,然后从那里提取设置。我已经可以做到这一点,所以这不是问题 - 我只需要确保文件可以在那里阅读
【问题讨论】:
【参考方案1】:这可以通过将以下内容添加到类库的项目文件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
文件,效果就会级联到所有引用项目。
【讨论】:
我试图让它与网站项目一起工作,但它不会复制 *.dll.config 文件。 太棒了!我有参考 ConsoleApp 的 WinFormsApp,我需要将 ConsoleApp.exe.config 文件复制到 WinFormsApp 输出文件夹。我稍微修改了<Link>$(TargetName).exe.config</Link>
上面的代码。 (dll
改为exe
)
@cincua 我不确定网站项目,抱歉。它似乎适用于 Web 应用程序项目或 WinFormsApp。也许您可以尝试创建一个 Web 应用程序项目来检查您没有做错什么并确认是 Web 站点项目是罪魁祸首?
这很好用!附注:虽然这已经可以通过替换 app.config
的现有元素来实现,但配置文件在解决方案资源管理器中将不再可见。所以我留下了原来的元素,只添加了另一个带有Link
和CopyToOutputDirectory
子元素的元素。
我最终得到了 Link
元素的以下内容,它同样适用于 exe
和 dll
程序集:<Link>$(TargetFileName).config</Link>
【参考方案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 似乎可以按预期开箱即用地处理配置文件。无需手动修改项目文件。
【讨论】:
Visual Studio 2019 似乎无法开箱即用。以上是关于Visual Studio/MSBuild 将引用的类库的 app.config 作为 *.dll.config 复制到当前项目的 bin 文件夹的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 2019 未将引用的项目添加到 deps.json
在 Visual Studio 2013 中,如何将代码分析限制为我的代码而不是引用的程序集?
WP7,将服务引用添加到Visual Studio 2010后如何使用它