我们可以自动复制 *.dll.config 吗?

本文关键字:dll config 复制 我们 | 更新日期: 2023-09-27 17:55:29

当引用库程序集时,它会自动复制到最终的 bin 目录中。但是 *.dll.config 不是,有没有办法自动复制此配置文件?

我们可以自动复制 *.dll.config 吗?

在下面的帖子中有一个更好的答案:

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

// Add this <ItemGroup> at the end of your .csproj file before </Project> and after <Import Project="$(MSBuildToolsPath)'Microsoft.CSharp.targets" />
<ItemGroup>
    <Content Include="app.config">
        <Link>$(TargetName).dll.config</Link>
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
</ItemGroup>

将 dll 项目中的 app.config 重命名为 [dllname].dll.config。将同一文件的属性更改为"始终复制"并重建。对我来说效果很好。我还尝试通过VS中的"设置"对话框添加另一个设置,即使它不再是app.config,它也更新得很好。顺便说一句,使用 VS2013 更新 3。

做类似事情的另一种方法是在项目文件夹中创建一个带有 [dllname].dll.config 的硬链接文件,并将其上的属性更改为"始终复制",这样您仍然可以正常使用 app.config,但如果您更新了它,它还将更新您的 [dllname].dll.config 文件。这里唯一真正的警告是,当您签入 TFS 等源代码管理时,它可能不会跟踪硬链接,并且可能会意外覆盖链接。但话又说回来,当您"添加和现有项目"作为链接时,它确实尊重链接,因此它可能适用于您的情况,也可能不适用于您的情况。你决定。

在Visual Studio中,当您打开活动文件时,有一个"属性"部分。对于App.config,它有一个名为Copy to Output Directory的属性,选项是

  • Do Not Copy
  • Copy if Newer
  • Copy Always

您需要第二个或第三个选项。

使用默认 CLR 主机时,只有 EXE 可以具有 .config 文件。 不是 DLL。 复制 .dll.config 文件应该是没有意义的,除非您自己显式打开并解析该文件。 在这种情况下,您应该使用不同的名称以避免混淆。

我遇到了同样的问题。您可能会遇到"属性"无法帮助您将 app.config 复制到需要的位置的情况。例如,当您执行集成单元测试时。然后,您可以有两个选择:

  1. 使用生成后事件

    copy/Y "$(ProjectDir)App.config" "....''test''Debug''$(TargetFileName).config"

  2. 手动将配置文件部分从libA.dll复制到libA.Test.dll

我最终使用了 2,因为它对我来说更强大。

虽然我迟到了,但我的回答可以帮助别人。我使用以下命令作为预构建事件:

copy /Y $(SolutionDir)'[YOUR_LIBRARY_PROJECT]'app.config $(ProjectDir)$(OutputPath)[YOUR_LIBRARY_NAME].dll.config

我试图尽可能地保持动态,上面的命令奏效了。