我从EF获得一个InvalidOperation异常,说“在配置文件中找不到名为'xyz'的连接字符串。但是,我使用EF向导使用Database First创建模型。它连接正常(在设计时) )并在名为EF的文件夹中创建了所有EDMX内容。
警告:我们的项目作为插件运行到另一个程序,它要求我们把这个语句放到Build Output Path ...... \ Bin \,我们把所有构建内容的4个目录放在目录下面项目我已经尝试将app.config手动复制到上面显示的Bin目录后面的一个目录中。我把它放在上面的Bin目录中,无法获取项目来查找配置文件。
任何提示?
答案 0 :(得分:1)
要使用Entity Framework,您的执行程序集需要在其配置文件中查找有关EF的信息。在WPF应用程序中,通常会App.config
将其重命名为Projectname.exe.config
,但在调试时,会使用Projectname.vshost.exe.config
,您应该检查。
配置文件需要包含三个重要的事项才能运行实体框架。
<configuration>
<configSections> <!-- 1. a section "entityFramework" -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<connectionStrings> <!-- 2. a connection string -->
<add name="YourContext" connectionString="todo" providerName="System.Data.EntityClient" />
</connectionStrings>
<entityFramework> <!-- 3. entityFramework Tag -->
<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>
</configuration>
使用向导时会生成所有这些部分。您只需将它们复制到正确的配置文件中即可。
编辑只是指出其他一些基础知识
在Application-Startup中只打开了一个 Config-File
。那是<NameOfApp>.exe.config
。
构建应用程序 - 构建可执行项目时,内部包含的App.config
将被复制到输出目录并重命名,如上所述。在使用某些其他组件的任何情况下,例如,一个库项目或其他什么,如果库项目的app.config中包含相关数据,它将不会自动使用。
这就是您必须执行上述步骤的原因。
在 OP的案例中,他的程序MyProgram.dll
将被复制到另一个目录中,其他程序(让我们称之为Master.exe
)将执行此程序集。这意味着,即使他还复制了MyProgram.dll.config
,它也不会自动打开,因为在这种情况下运行的配置是Master.exe.config
。如果OP想要使用某些配置,他需要将其复制到Master.exe.config
这不是很干净,因为我希望这是一个完整的其他项目,因此,它们应该真正分开。 所以他需要手动执行一些代码,运行其插件的配置。
答案 1 :(得分:0)
此问题的根本原因是此程序的调试版本未在典型的调试文件夹root / bin / debug中运行。我们的团队已将代码放入项目文件中,以复制和执行程序(x86)文件夹中的内容,其中插件必须是主机解决方案才能找到它。
如果您遇到这种情况,此代码将告诉您程序集的执行位置:
Assembly.GetExecutingAssembly().CodeBase.
一旦我把它作为调试语句,我知道在哪里寻找配置文件。
我最初错过了这个,因为项目文件中的复制语句在Build / Post Build区域中不易看到。您必须打开项目文件才能看到它们。