【发布时间】:2015-05-01 07:00:39
【问题描述】:
我查看了之前的帖子,例如 How do I prevent the app.config from being integrated into a .net Library (dll)
但这些对我的情况没有帮助。
我无法让 Outlook 插件 app.config 未编译到 dll 中。我假设它正在编译,因为当它第一次加载时,我要求应用程序向我显示其配置文件的路径:
MessageBox.Show(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.ToString());
这将返回文件的路径
C:\Users\...\AppData\ [random name]\outlookadddin.config
而不是使用与 dll 本身位于同一文件夹中的 app.config。
我可以强制配置管理器引用与程序集相同文件夹中的 dll,而不是创建自己的一个吗?
更新: 找到这个之后: how do I make my application read the application config instead of machine.config?
它似乎部分推进了一个解决方案,简短地解释说,它是通过 ClickOnce \ MSI 部署的 VSTO 的一个已知问题。您需要将 |VSTOLOCAL 添加到注册表清单密钥路径。
我现在面临的问题是,如果我在网络驱动器上安装我的插件,使用 |VSTOLOCAL 它根本不会加载,删除 |VSTOLOCAL 它就像一个魅力。有什么想法吗?
【问题讨论】:
-
不清楚你的意思——首先,
app.config从来没有被编译或集成到 DLL 中——其次,app.config是一种设计—— time only 文件 - 在编译时它被重命名为(yourproject).exe.config或yourproject.dll.config。 -
感谢您的评论。是的,它是,但由于某种原因,我的 project.dll.config 文件与程序集位于同一文件夹中,没有被使用,它被发送到 \bin\release 文件夹,但我可以简单地删除它,应用程序似乎只是将其全部忽略,并在 ..\users\appdata[...]\project.dll.config 下的随机位置创建自己的配置文件副本
-
这是标准 .NET 配置行为 - DLL 的配置从不使用,您必须将配置添加到 托管应用程序(例如您的主应用程序或您的网站)
-
所以你基本上是说我使用 dll 配置文件的唯一方法是将其命名为 Outlook.exe.config 并将其放在 office 文件夹中?
-
或者您需要自己显式加载任意命名的配置(使用 `ConfigurationManager.OpenMappedExeConfiguration),然后自己滚动(有关详细信息,请参阅 MSDN 文档)
标签: c# .net vsto configurationmanager