【问题标题】:Can we autocopy the *.dll.config? [duplicate]我们可以自动复制 *.dll.config 吗? [复制]
【发布时间】:2011-08-20 14:23:06
【问题描述】:

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

【问题讨论】:

    标签: c#


    【解决方案1】:

    下面的帖子有更好的答案:

    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>
    

    【讨论】:

    • 我没有尝试过这个,但是如果你想在部署时使用慢 cheetah 转换文件,它似乎可能会出现问题。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      • Do Not Copy
      • Copy if Newer
      • Copy Always

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

      【讨论】:

      • 但是这些选项是针对当前解决方案中项目中的文件进入bin目录的;不适用于您可能使用“添加引用”选项引用的外部 dll。
      【解决方案4】:

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

      【讨论】:

      • 为什么我没有 dll 的配置文件?那有什么问题?您可能知道 ASP.NET 网站被编译成 dll。你是说网络配置不存在?
      • 问题是它不受支持。 ASP.NET 是不同的 CLR 宿主,它有不同的规则。
      【解决方案5】:

      我遇到了同样的问题。当 Properties 无法帮助您将 app.config 复制到您需要的地方时,您可能会遇到这种情况。例如当您进行集成单元测试时。那么你可以有两种选择:

      1. 使用构建后事件

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

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

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

      【讨论】:

        【解决方案6】:

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

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

        我尽量保持动态,上面的命令奏效了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-17
          • 2014-07-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多