拆分配置文件会导致System.Configuration.dll中出现异常

时间:2013-10-08 11:36:59

标签: .net asp.net-mvc web-config app-config

我有一个MVC .NET应用程序。该解决方案包含应用程序本身和单元测试项目,该项目还包含集成测试(包括需要数据库连接的数据层测试)。

我决定将两个项目的连接字符串放在一个单独的配置文件中。我将<connectionStrings>标记的内容复制到一个新文件中,并在Web项目的Web.config文件和测试项目的app.config文件中使用了configSource属性。 Web项目调试和运行就像以前一样。测试项目无法调试,它以

退出
  

'vstest.executionengine.x86.exe'(托管(v4.0.30319)):已加载'C:\ Windows \ Microsoft.Net \ assembly \ GAC_MSIL \ System.Configuration.resources \ v4.0_4.0.0.0_de_b03f5f7f11d50a3a \ System.Configuration.resources.dll'

     

System.Configuration.dll中出现'System.Configuration.ConfigurationErrorsException'类型的第一次机会异常

当我尝试运行它时,所有测试都失败了。当我使用app.config文件的原始版本时,它们会通过。

这是适用的app.config版本:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
  <connectionStrings>
    <add name="TumorModelsDB" connectionString="Data source=tsql2; Initial Catalog=TumorModelle; User Id=anonymized; Password=anonymized;" providerName="System.Data.SqlClient" />
    <add name="AzaraIntegrationTest" connectionString="Data Source=tsql2;Initial Catalog=AzaraIntegrationTest;User Id=anonymized; Password=anonymized;" providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

这是不起作用的版本(与其他项目工作的web.config相同):

<?xml version="1.0" encoding="utf-8"?>
<configuration>
...
  <connectionStrings configSource="ConnectionStrings.config" />
</configuration>

(完整的)新ConnectionStrings.config文件是:

  <connectionStrings>
    <add name="TumorModelsDB" connectionString="Data source=tsql2; Initial Catalog=TumorModelle; User Id=anonymized; Password=anonymized;" providerName="System.Data.SqlClient" />
    <add name="AzaraIntegrationTest" connectionString="Data Source=tsql2;Initial Catalog=AzaraIntegrationTest;User Id=anonymized; Password=anonymized;" providerName="System.Data.SqlClient" />
  </connectionStrings>

ConnectionStrings.config文件的内容与连接字符串标记的旧内容完全相同。 configSource属性中的文件名中没有拼写错误。 ConnectionStrings.config文件存在于测试项目中(它不是来自Web项目的链接)。 “构建操作”设置为“内容”,“复制到输出”为“不复制”。我没有想法在哪里寻找问题的根源。有任何想法吗?

1 个答案:

答案 0 :(得分:1)

我设法找到了解决方案。

尽管对this answer的评论说正确的设置是“不要复制”,但将其设置为“始终复制”解决了问题。现在项目按预期运行和调试。

当文件设置为“始终复制”时,Web项目也会正常运行。当我用链接到Web项目的连接设置文件替换包含的文件时,这非常有用,正如我从一开始就想要的那样。

分步解决方案:在配置文件中,选择“属性”。在“属性”窗口中,将“复制输出”设置的值更改为“始终复制”。