【问题标题】:prevent App.Config compiled into the dll VSTO (C# \ .Net)防止 App.Config 编译成 dll VSTO (C#\.Net)
【发布时间】: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.configyourproject.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


【解决方案1】:

好的,我终于找到了答案: 它从 vsto 4.0 开始出现 - 您必须在清单注册表项的末尾添加 |vstolocal 才能使用文件夹中的 .config 文件,而不是缓存中的文件。

通过将 |VSTOLOCAL 添加到 regkey 解决了我的问题,但由于我希望将插件 dll 放置在网络驱动器上,这导致 Outlook 出现信任问题,由于某种原因似乎不支持安装网络驱动器默认插件。

通过添加此注册表项解决了这些问题:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\vsto runtime Setup\v4]
"EnableVSTOLocalUNC"=dword:00000001

现在一切正常。 谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多