【发布时间】:2017-10-22 23:59:04
【问题描述】:
我正在尝试 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>
下一步是使用delphi 制作VCL 主机,然后使用HYModuleManager 组件加载WPF 模块的.dll。这很简单:
procedure TMainForm.FormCreate(Sender: TObject);
begin
HYModuleManager1.LoadModule('%path%\to\wpf\module\GridsModule.dll');
HYModuleManager1.CreateVisualPlugin('ClientGridView', fInstance, Panel1);
end;
我在 Delphi 中运行应用程序。但是会抛出这个错误:
(翻译:调用目标抛出异常)
因此,通过更多研究,我使用 VisualStudio 运行此应用程序 (HydraHost.exe),并意识到这是模块引发的异常:
System.InvalidOperationException : 'No connection string named 'ModelConnection' could be found in the application config file.'
然后我决定编写一个 WPF 主机。我将 WPF Host App.config 设置为包含连接字符串和提供程序信息。毫不奇怪,一切正常。
因此,对于 VCL 主机,找不到 connectionString。对于 WPF 主机,它是。我的结论是 app.config 不是由 VCL 主机加载的,而是由 WPF 主机加载的。
所以我接下来要做的是按照答案之一的建议手动将 WPFHost.dll.config 复制到 VCLHost.exe.config,但同样的错误,未找到 connectionString。
所以我的问题是:如何将 .exe.config “链接”到使用 Delphi 构建的 VCL 应用程序?
【问题讨论】:
-
也许您可以尝试使用 ConfigurationManager msdn.microsoft.com/en-us/library/ms134260(v=vs.110).aspx 直接从配置文件中读取配置设置/连接字符串,它可能会给您更详细的错误,说明它不起作用。
标签: wpf delphi dll plugins app-config