1

我有一个 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 项目的链接)。Build Action 设置为 Content,Copy to Output 设置为 Do not copy。我没有想法在哪里寻找问题的根源。有任何想法吗?

4

1 回答 1

1

我设法找到了解决方案。

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

当其文件设置为始终复制时,Web 项目也可以正常运行。当我将包含的文件替换为指向 Web 项目的连接设置文件的链接时,这很有用,正如我从一开始就打算的那样。

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

于 2013-10-08T12:15:46.313 回答