我正在尝试RemObject Hydra在VCL应用程序中嵌入一个WPF模块。
在这种WPF模块,我有网格控件和的EntityFramework的DataContext。这是connectionString
,providers
和一切存储在app.config
。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<connectionStrings>
<add name="ModelConnection" connectionString="character set=UTF8;data source=localhost;initial catalog=PATHTODATABASE.FDB;user id=SYSDBA;password=MASTERKEY" providerName="FirebirdSql.Data.FirebirdClient" />
</connectionStrings>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<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="FirebirdSql.Data.EntityFramework6.FbConnectionFactory, EntityFramework.Firebird" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="FirebirdSql.Data.FirebirdClient" type="FirebirdSql.Data.EntityFramework6.FbProviderServices, EntityFramework.Firebird" />
</providers>
</entityFramework>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="FirebirdSql.Data.FirebirdClient" publicKeyToken="3750abcc3150b00c" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<system.data>
<DbProviderFactories>
<remove invariant="FirebirdSql.Data.FirebirdClient" />
<add name="FirebirdClient Data Provider" invariant="FirebirdSql.Data.FirebirdClient" description=".NET Framework Data Provider for Firebird" type="FirebirdSql.Data.FirebirdClient.FirebirdClientFactory, FirebirdSql.Data.FirebirdClient" />
</DbProviderFactories>
</system.data></configuration>
下一个步骤是,使主机VCL用delphi然后使用HYModuleManager
组件加载WPF模块的.dll文件。这是非常直接的:
procedure TMainForm.FormCreate(Sender: TObject);
begin
HYModuleManager1.LoadModule('%path%\to\wpf\module\GridsModule.dll');
HYModuleManager1.CreateVisualPlugin('ClientGridView', fInstance, Panel1);
end;
我在Delphi中运行应用程序。但是,这个错误被抛出:
(翻译:一个例外是通过调用的目标引发异常)
所以多一点研究,我运行此应用程序(HydraHost.exe使用VisualStudio中),并认识到这对由模块抛出的异常:
System.InvalidOperationException : 'No connection string named 'ModelConnection' could be found in the application config file.'
然后我决定写一个WPF主机。我将WPF主机App.config设置为包含连接字符串和提供程序信息。毫不奇怪,一切正常。
因此,与VCL主机,ConnectionString中是找不到的。有了WPF主机,它是。我的结论是,app.config不是由VCL主机加载的,而是由WPF主机加载的。
所以我接下来做的是手动将WPFHost.dll.config复制到VCLHost.exe.config中,如其中一个答案所示,但是同样的错误,connectionString没有找到。
所以我的问题是:我如何“链接”.exe.config到Delphi构建的VCL应用程序?
也许你可以尝试直接使用ConfigurationManager中HTTPS配置文件读取配置设置/连接字符串:// msdn.microsoft.com/en-us/library/ms134260(v=vs.110).aspx 它可能会给你更详细的错误,它不起作用。 –