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

C# 我们可以自动复制*.dll.config吗?,c#,C#,引用库部件时,它会自动复制到最终的bin目录。但是*.dll.config不是,有没有办法自动复制此配置文件?在Visual Studio中,打开活动文件时会有一个“属性”部分。对于App.config,它有一个名为Copy to Output Directory的属性,选项如下 请勿复制 如果更新,请复制 始终复制 您需要第二个或第三个选项 对于默认CLR主机,只有EXE可以有.config文件。不是DLL。除非您自己显式地打开并解析文件,否则复制.dll.config文件应该是毫无意义的

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

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

  • 请勿复制
  • 如果更新,请复制
  • 始终复制

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

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

我也有同样的问题。当属性无法帮助您将app.config复制到需要的位置时,您可能会遇到这种情况。例如,当您进行集成单元测试时。然后您可以有两个选择:

  • 使用生成后事件

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

  • 手动将配置文件节从libA.dll复制到libA.Test.dll


  • 我最终使用了2,因为它对我来说更加健壮。

    将dll项目中的app.config重命名为[dllname].dll.config。将同一文件的属性更改为“始终复制”并重新生成。这对我很有用。我还尝试通过VS中的“设置”对话框添加另一个设置,尽管它不再是app.config,但更新良好。顺便说一句,使用VS2013更新3


    执行类似操作的另一种方法是在项目文件夹中创建一个具有[dllname].dll.config的硬链接文件,并将该文件的属性更改为“始终复制”,这样您的app.config仍保持正常,但如果您更新了它,它也会更新[dllname].dll.config文件。这里唯一需要注意的是,当您签入诸如TFS之类的源代码管理时,它可能不会跟踪硬链接,并且您可能会意外地覆盖该链接。但是,当你将“添加和现有项目”作为链接时,它也会尊重链接,所以它可能对你的情况起作用,也可能不起作用。由你决定

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

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

    我尽可能地保持动态,上面的命令起了作用。

    下面的帖子中有一个更好的答案:

    //将其添加到.csproj文件前后的末尾
    $(TargetName).dll.config
    保存最新
    
    但这些选项用于当前解决方案中项目中的文件进入bin目录;不适用于您可能使用“添加引用”选项引用的外部dll。为什么我不能拥有dll的配置文件?这有什么问题?您可能知道,ASP.NET网站被编译成DLL。你是说web配置不存在吗?问题是它不受支持。ASP.NET是一个不同的CLR主机,它有不同的规则。我没有尝试过这个,但是如果您想在部署时使用慢速cheetah转换文件,它可能会出现问题。
    // 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>