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

时间:2011-05-07 02:36:24

标签: c#

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

6 个答案:

答案 0 :(得分:3)

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

执行类似操作的另一种方法是使用项目文件夹中的[dllname] .dll.config创建一个硬链接文件,并将其上的属性更改为"始终复制"这样你仍然可以正常使用你的app.config,但是如果你更新它,它也会更新你的[dllname] .dll.config文件。这里唯一真正的警告是,当您检查源代码控制(如TFS)时,它可能无法跟踪硬链接,您可能会意外覆盖链接。但是,当你添加和现有项目时,它确实会尊重链接。作为一个链接,因此它可能适用于您的情况,也可能不适用。你决定。

答案 1 :(得分:3)

以下文章中有一个更好的答案:

Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project

// 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>

答案 2 :(得分:1)

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

  • Do Not Copy
  • Copy if Newer
  • Copy Always

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

我遇到了同样的问题。当属性无法帮助您在需要的地方复制app.config时,您可能会遇到这种情况。比如当你做集成单元测试时。然后你可以有两个选择:

  1. 使用帖子构建活动

    copy / Y“$(ProjectDir)App.config”“.... \ test \ Debug \ $(TargetFileName).config”

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

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

答案 5 :(得分:1)

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

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

我尽可能地保持动态,上面的命令也有效。