2011-05-07 119 views

回答

1

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

  • Do Not Copy
  • Copy if Newer
  • Copy Always

你想第二个或第三个选项。

+6

但这些选项是在当前的解决方案,以进入bin目录中的项目文件;而不是您可能使用Add Reference选项引用的外部dll。 – 2011-05-07 02:47:27

1

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

+0

为什么我没有dll的配置文件?那有什么问题?正如你可能知道ASP.NET网站被编译成dll。你是说web配置不存在吗? – oleksii 2011-05-07 07:21:55

+0

问题是它不被支持。 ASP.NET是一个不同的CLR主机,它有不同的规则。 – 2011-05-07 09:44:09

1

我有同样的问题。 属性不会帮助您将app.config复制到需要的位置。比如你什么时候做整合单元测试。然后,你可以有两种选择:

  1. 使用后生成事件

    复制/ Y“$(PROJECTDIR)的App.config”“.... \测试\调试\ $(TargetFileName)。配置”

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

我最终使用2,因为它被证明是更健壮的我。

3

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

做类似的事情的另一种方法是创建一个硬链接文件与项目文件夹中的[dllname] .dll.config并更改其属性,以“永远复制”的方式你仍然有你的app.config正常,但如果你更新它,它也会更新你的[dllname] .dll.config文件。唯一真正的警告是,当你检入像TFS这样的源代码控制时,它可能无法跟踪硬链接,并且你可能会意外地覆盖链接。但是,当您“添加和现有项目”作为链接时,它会再次确认链接,因此它可能会或可能不适合您的情况。你决定。

1

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

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

我试图尽可能地保持动态,并且上述命令奏效。

2

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

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> 
+1

我还没有尝试过这个,但是如果你想在缓慢猎豹的部署上转换文件,它似乎会出现问题。 – emragins 2017-03-22 23:35:22

相关问题