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

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

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

  • Do Not Copy
  • Copy if Newer
  • Copy Always

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

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

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

以下post有一个更好的答案:

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

 // Add this  at the end of your .csproj file before  and after    $(TargetName).dll.config PreserveNewest   

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

我有同样的问题。 您可以遇到属性无法帮助您在需要的地方复制app.config的情况。 比如当你做集成unit testing时。 那么你可以有两个选择:

  1. 使用post build事件

    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 

我试图尽可能地动态,并且上面的命令有效。