当引用库程序集时,它会自动复制到最终的bin目录。但是* .dll.config不是,有没有办法自动复制这个配置文件?
答案 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)
以下文章中有一个更好的答案:
// 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时,您可能会遇到这种情况。比如当你做集成单元测试时。然后你可以有两个选择:
使用帖子构建活动
copy / Y“$(ProjectDir)App.config”“.... \ test \ Debug \ $(TargetFileName).config”
手动将配置文件部分从libA.dll复制到libA.Test.dll
我最终使用了2,因为它对我来说更加强大。
答案 5 :(得分:1)
虽然我迟到了,但我的回答可以帮助别人。我使用以下命令作为预构建事件:
copy /Y $(SolutionDir)\[YOUR_LIBRARY_PROJECT]\app.config $(ProjectDir)$(OutputPath)[YOUR_LIBRARY_NAME].dll.config
我尽可能地保持动态,上面的命令也有效。