在.NET中,我为我的WCF服务开发了一个客户端库。来自VBA的WCF客户端
我已经注册了COM互操作程序集,以便可以从VBA调用库。
然而,由于使用该库的可执行文件在.NET环境未建,库函数是无法找到定义服务绑定(在Visual Studio项目“的app.config”)
配置文件有没有什么办法可以指定配置文件应该在哪里放置的路径?
感谢
在.NET中,我为我的WCF服务开发了一个客户端库。来自VBA的WCF客户端
我已经注册了COM互操作程序集,以便可以从VBA调用库。
然而,由于使用该库的可执行文件在.NET环境未建,库函数是无法找到定义服务绑定(在Visual Studio项目“的app.config”)
配置文件有没有什么办法可以指定配置文件应该在哪里放置的路径?
感谢
做到这一点,正确的方法是不要直接COM激活WCF客户端,而是写一个定制的垫片,将旋转了一个新的AppDomain,创建客户端,并将客户端的IDispatch返回给COM调用者。一旦你创建了自己的AppDomain,你可以从任何你喜欢的位置加载它的配置文件 - 这取决于你的主机垫片来告诉它在哪里。使用2.0中引入的AppDomainManager,您甚至不必编写非托管填充程序 - 您可以编写一个小型100%管理的ComVisible填充程序,将您的WCF客户端加载到其自己的域中。我已经将这种技术用于许多必须在Excel中运行的大型项目(您遇到过同样的问题 - 将Excel.exe.config放置到共享位置的错误形式),并且效果很好。
即使你有一个“原生”的Win32应用程序,你仍然可以摆正在同一目录中的应用程序称为MyApp.exe.config
一个配置文件,以及.NET部分应该是能够找到和解释该配置文件。
您的VB应用程序不会知道任何关于该配置文件的信息,也不会对它做任何事情 - 但是您的.NET客户端库将查找并使用它。
我已经使用这种技术将C#代码组件集成到本机C++/Win32应用程序中 - 这对我来说就像是一种魅力。
它需要一个完全编译,本地EXE文件,这种方法的工作 - 不知道您的VBA项目提供的,虽然...
如果您不能使用此选项直播,实际上,只有其他选项是以编程方式定义和加载配置文件。你不能定义/指定配置文件的位置 - 但你可以在代码中加载一个特定的配置文件并使用它(几乎与默认配置文件相同)。
退房的ConfigurationManager.OpenMappedExeConfiguration方法:
// you need to define a ExeConfigurationFileMap that defines what file to use
ExeConfigurationFileMap exeMap = new ExeConfigurationFileMap();
exeMap.ExeConfigFilename = @"C:\Application\Default.config";
// then, you need to load that file with the ConfigurationManager
Configuration exeConfig =
ConfigurationManager.OpenMappedExeConfiguration(exeMap, ConfigurationUserLevel.None);
// now you can access parts of that config
string someValue = exeConfig.AppSettings.Settings["SomeValue"].Value;
string connStr = exeConfig.ConnectionStrings.ConnectionStrings["Default"].ConnectionString;
这是行不通的。不幸的是,我认为生产级系统不应该放置它应该用自己的文件污染MS Office目录,所以我想找到一个解决方案,允许我选择配置文件的位置。 – mcoolbeth 2010-06-22 20:25:58