2017-05-23 68 views
0

enter image description here如何将App.Config文件加载到VCL应用程序中?

我正在尝试RemObject Hydra在VCL应用程序中嵌入一个WPF模块。

在这种WPF模块,我有网格控件和的EntityFramework的DataContext。这是connectionStringproviders和一切存储在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中运行应用程序。但是,这个错误被抛出:

An exception was thrown by the target of an invocation

(翻译:一个例外是通过调用的目标引发异常)

所以多一点研究,我运行此应用程序(HydraHost.exe使用VisualStudio中),并认识到这对由模块抛出的异常:

System.InvalidOperationException : 'No connection string named 'ModelConnection' could be found in the application config file.' 

然后我决定写一个WPF主机。我将WPF主机App.config设置为包含连接字符串和提供程序信息。毫不奇怪,一切正常。

enter image description here

因此,与VCL主机,ConnectionString中是找不到的。有了WPF主机,它是。我的结论是,app.config不是由VCL主机加载的,而是由WPF主机加载的。

所以我接下来做的是手动将WPFHost.dll.config复制到VCLHost.exe.config中,如其中一个答案所示,但是同样的错误,connectionString没有找到。

所以我的问题是:我如何“链接”.exe.config到Delphi构建的VCL应用程序?

+0

也许你可以尝试直接使用ConfigurationManager中HTTPS配置文件读取配置设置/连接字符串:// msdn.microsoft.com/en-us/library/ms134260(v=vs.110).aspx 它可能会给你更详细的错误,它不起作用。 –

回答

0

你应该你的app.config重命名为YourExeName.exe.config因为它可能现在YourDllName.dll.config

+0

是的,我已经尝试过,但它似乎没有加载。我仍然得到MyConnectionString not found错误...你确定delphi VCL exes会试图找到.exe.config吗? – Ludo

+0

Vcl exe对配置文件一无所知,但.net Configuration Manager加载可执行配置文件。我们还使用hydra将.net程序集加载到我们的vcl exe文件中。虽然我们没有使用配置文件来自动配置选项,但我们从中读取了几个appSettings。 –

相关问题