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 文件夹中?
- Visual Studio / MSBuild 默认情况下似乎没有这样做。
- 更改
Copy to Output Directory
或 Build Action
(任意组合)无效。
- SlowCheetah VS extension 似乎可以做我想做的事情,这是其配置转换过程的意外副作用,但我想这样做 without 任何第 3 方扩展。
顺便说一句:手动将所有这些配置放入每个 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 似乎开箱即用地处理配置文件。无需手动修改项目文件。
我有一个 class 库 ,许多其他 Web 应用程序项目都引用了它。它的 app.config
中有许多我希望在所有引用 Web 项目中使用的设置。当构建 class 库时,它将 app.config
复制到它自己的 bin
文件夹中作为 <assembly.name>.dll.config
。
如何确保将 <assembly.name>.dll.config
复制到我的引用 Web 应用程序项目的 每个 的 bin 文件夹中?
- Visual Studio / MSBuild 默认情况下似乎没有这样做。
- 更改
Copy to Output Directory
或Build Action
(任意组合)无效。 - SlowCheetah VS extension 似乎可以做我想做的事情,这是其配置转换过程的意外副作用,但我想这样做 without 任何第 3 方扩展。
顺便说一句:手动将所有这些配置放入每个 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 似乎开箱即用地处理配置文件。无需手动修改项目文件。