我正在创建VS扩展,其中某些设置存储在数据库中。在运行时,一旦达到LINQ查询,应用程序就会引发错误:“在应用程序配置文件中找不到名为'MercuryEntities'的连接字符串。”
该解决方案由两个项目组成:一个类库(edmx文件所在的位置)和引用该类库的VSIX项目。该扩展程序打开一个Winform,该Winform需要连接到数据库才能加载。我在两个项目中都有一个名为“ MercuryEntities”的连接字符串定义了一个App.config。它仍处于开发的开始阶段,因此我只是连接到localhost。建立模型就可以了。
类库的App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="MercuryEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost;initial catalog=Mercury;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
VSIX的App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="mssqllocaldb" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
<connectionStrings>
<add name="MercuryEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost;initial catalog=Mercury;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
数据库上下文构造函数:
public MercuryEntities()
: base("name=MercuryEntities")
{
}
我搜索了多个论坛,但没有找到有关VSIX项目中EF的任何信息。大多数答案包括确保主应用程序具有连接字符串的副本。
关于为什么会发生这种情况的任何想法?