.net - 当通过 COM 调用时,我可以从 .net 代码使用/访问 app.config

标签 .net vba com app-config

我有一组现有的 .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/

相关文章:

c# - 计算 Windows 进程的 CPU 使用率?

.net - 如何格式化对象 ID 和日期以使用 .net 在 json 序列化的 mongodb 数据中正确显示?

arrays - 使用 Application.Match 数组 VBA 中最后一个元素的索引

c# - 与 VBA 相比,VSTO 性能较慢

c# - 从 .NET ActiveX 组件读取 JScript(关联)数组

c++ - 如何将 com 实例转换为变体,以在 idispach 调用中传递它

.net - 如何使用 DateTime.TryParse 将日期从 yyyyMMdd 格式转换为 mm-dd-yyyy 格式

c# - 使用 DynamicMap() 并忽略空源值

excel - 根据找到的值将变量分配给另一个单元格

visual-studio - 为什么我的安装项目不执行我的自定义注册过程