我们的 VSTO 插件有一个非常奇怪的问题。
在我们的加载项中有标签控件,它们从 app.config 文件中读取标签文本值并将配置文件中的文本显示给用户:
<!-- app.config -->
<configuration>
<configSections>
...
</configSections>
<!-- start applicationSettings -->
<applicationSettings>
<OurVSTOAddIn.MySettings>
<setting name="ackMsg" serializeAs="String">
<value>Some text here that we want to display and change</value>
</setting>
...
<OurVSTOAddIn.MySettings>
</applicationSettings>
</configuration>
'vb.net code
objCheckDialog.lblAttachmentsMsg.Text = My.Settings("attachmentsAckMsg").ToString()
objCheckDialog.lblAttachmentsMsg.Visible = True
我们最近更新了 app.config 文件,为我们在日本的最终用户将英文显示信息替换为 Kanjii。
当我们重建 MSI 并安装在我们的测试机器上时,插件没有显示 Kanjii(尽管它在开发中正确显示)。
现在我们想知道安装目录中的配置文件是否正在被读取,或者信息是否被缓存,或者加载项是否正在从某个地方的另一个文件中读取。
更奇怪的是,我们更改了 app.config 文件中用于代码逻辑的其他值,而且这些值似乎可以正常加载。
我们目前正在使用 Procmon 来找出配置文件的加载方式,但是,同时过滤以下内容:
- 进程名称包含 Outlook
- 路径包含“OurOutlookPlugInName”
这会产生超过 400 个结果,但除非我在 Visual Studio 中调试代码,否则我们看不到配置文件的任何文件处理。
在我们的安装机器上,我们还从安装目录中删除了配置文件,认为这可能是插件是否正在从安装目录中读取配置文件的线索,但它没有效果,并且加载了插件通常再次显示英文而不是汉字。
所有配置设置都在应用程序级别。
有没有办法让我们知道我们的插件从哪里加载我们的配置文件?
我们是否在我们的 MSI 构建中做了一些不正确的事情,导致更新的配置文件无法加载?
更新:
我使用 Telerik JustDecompile 打开了 C:\Program Files (x86)\OurVSTOAddIn 安装目录中的 dll 文件,以查看配置设置是否写在 dll 中的某处,我可以看到在 OurVSTOAddIn->My Settings 下肯定有 DefaultSettingValues , 如下所示:
这是有道理的,因为这些是应用程序范围设置,这将阻止用户更改配置设置。
但我在想,如果我们使用应用程序范围变量,每次我们都需要重建 msi 以进行发布,这对我来说没有意义,因为我们想要为项目使用配置设置的原因是不需要重建配置更改。