我有一组现有的 .net 库,我希望从 Excel VBA 调用(该部分工作正常)。这些库依赖于 app.config 中的设置。我知道我可以在 excel.exe.config 文件中输入这些设置(与 excel.exe 放在同一目录中),但这对我来说似乎并不是一个非常易于管理的解决方案,因为我可以看到如果不止一个应用程序想要这样做。
我的问题很简单:有没有什么方法可以让 COM 暴露的 dll 引用它们各自的配置文件?
示例 app.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="test" value="Hello world!" />
</appSettings>
</configuration>
示例 C#:
namespace ExcelVbaFacingCode
{
public class SimpleAppSettingReader
{
public string GetValue(string key)
{
return ConfigurationManager.AppSettings[key];
}
}
}
示例 VBA:
Public Sub Test()
Dim Test As New SimpleAppSettingReader
Dim sampleValue As String
sampleValue = Test.GetValue("test")
MsgBox "Value: '" + sampleValue + "'", vbOKOnly
End Sub
最佳答案
每当 ConfigurationManager.AppSettings
被调用,它会自动打开执行程序集的配置文件。在您的情况下,Excel 是正在执行的应用程序,因此您无法打开 .Net DLL 的配置文件。
这样做是有原因的。可以从多种类型的应用程序调用单个 DLL,每种应用程序可能有不同的要求(例如,可能还有不同的数据库)。因此,应用程序指定设置,而不是引用的程序集。
我认为你已经建议的是最好的方法来做到这一点。我知道您似乎在复制配置文件,这意味着您有重复的内容需要担心代码何时更改,但这是最好的做法。
关于.net - 当通过 COM 调用时,我可以从 .net 代码使用/访问 app.config,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288575/