我们的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文件,为日本的最终用户用汉字替换了英语显示信息。
当我们重建MSI并将其安装在我们的测试计算机上时,该加载项不会显示Kanjii(尽管在开发过程中可以正确显示)。
现在,我们想知道是否正在读取安装目录中的配置文件,或者是否缓存了信息,或者加载项正在从某处的另一个文件读取。
更奇怪的是,我们更改了app.config文件中用于代码逻辑的其他值,这些值似乎已正确加载。
我们目前正在使用Procmon,以试图找出配置文件的加载方式,同时对以下内容进行过滤:
这会产生400多个结果,但是除非在Visual Studio中调试代码,否则我们不会看到配置文件的任何文件处理。
在我们的安装机器上,我们还从安装目录中删除了配置文件,以为这可能是插件是否正在从安装目录中读取配置文件的线索,但是它没有任何作用,并且添加-在加载后,通常显示英文而不是汉字。
所有配置设置都在应用程序级别。
有没有办法告诉我们加载项从何处加载配置文件?
我们是否在MSI构建中做了一些不正确的操作,以防止加载更新的配置文件?
更新:
我使用Telerik JustDecompile在C:\ Program Files(x86)\ OurVSTOAddIn安装目录中打开了dll文件,以查看配置设置是否写在dll中,并且可以在OurVSTOAddIn->“我的设置”下看到肯定是DefaultSettingValues,如下所示:
这很有意义,因为它们是“应用程序范围设置”,并且可以防止用户更改配置设置。
但是我在考虑是否使用Application Scoped变量,每次我们都需要重建要发布的msi时,这对我来说没有意义,因为我们要为项目使用配置设置的原因是:无需重建即可进行配置更改。