【发布时间】:2011-08-20 14:23:06
【问题描述】:
当引用库程序集时,它会自动复制到最终的 bin 目录。但是 *.dll.config 不是,有没有办法自动复制这个配置文件?
【问题讨论】:
标签: c#
当引用库程序集时,它会自动复制到最终的 bin 目录。但是 *.dll.config 不是,有没有办法自动复制这个配置文件?
【问题讨论】:
标签: c#
下面的帖子有更好的答案:
// 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,它也可以正常更新。 BTW 使用 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 文件应该是没有意义的,除非您自己显式地打开和解析该文件。在这种情况下,您应该使用不同的名称以避免混淆。
【讨论】:
我遇到了同样的问题。当 Properties 无法帮助您将 app.config 复制到您需要的地方时,您可能会遇到这种情况。例如当您进行集成单元测试时。那么你可以有两种选择:
使用构建后事件
复制 /Y “$(ProjectDir)App.config” “....\test\Debug\$(TargetFileName).config”
手动将配置文件部分从 libA.dll 复制到 libA.Test.dll
我最终使用了 2,因为事实证明它对我来说更强大。
【讨论】:
虽然我迟到了,但我的回答可以帮助别人。我使用以下命令作为预构建事件:
copy /Y $(SolutionDir)\[YOUR_LIBRARY_PROJECT]\app.config $(ProjectDir)$(OutputPath)[YOUR_LIBRARY_NAME].dll.config
我尽量保持动态,上面的命令奏效了。
【讨论】: