【问题标题】:Several VSTO Projects in same Solution同一解决方案中的多个 VSTO 项目
【发布时间】:2019-07-07 13:08:54
【问题描述】:

如果我想为各种 Office 应用程序部署加载项,有哪些选项? 我的Solution 可以包含多个 VSTO Projects 吗?例如,一个 Excel 插件、一个 Word 插件和一个 PowerPoint 插件。

我应该/需要将每个 AddIn 放在单独的 Solution 中吗?特别是如果我运行 Excel,然后在不关闭 Excel 的情况下运行 Word:我最终会得到两个不同的实例并行运行吗?

我的一些类被多个插件使用,所以将所有内容放在一个Solution 中会更方便。这也将使部署和更新更容易。但是,我总是可以在独立的 DLL Project 中导出类,并在每个 Solution 中引用该 DLL。

【问题讨论】:

  • 这个问题可能过于宽泛且基于观点。 For example。谷歌将是一个更好的资源; SO 是针对特定问题的(尽管question help page 似乎不再能很好地解释这一点)。
  • Google 并不是很有用,因为大多数主题都提到在同一个解决方案中包含多个 Excel 项目以解决兼容性问题(一个 2010 项目和一个 2013-2016 项目)。在这里,我想知道我是否(以及如何)让 Excel 和 Word 一起生活和交流。我正在尝试定义我的 AddIn 的高级架构。欢迎使用两种解决方案或多合一解决方案的任何利弊。
  • 通常情况下,关于最佳实践的问题过于固执己见,无法成为好的 SO 帖子。但是,要回答您是否可以在同一个解决方案中添加多个问题,我当然无法想象为什么不这样做,或者为什么不鼓励这样做。我以前从未创建过 VSTO 项目,所以我不是这方面的专家,但我认为它只是构建到一个 DLL,就像任何其他类库一样,所以很难想象为什么在同一个解决方案中会有多个一个问题。我不知道有哪些项目类型不允许使用多个相同类型。
  • 对“最佳实践”的问题进行了轻微修改。但是我仍然卡住了。 @StevenDoggart,目前如果在同一个解决方案中,我无法让两个 VSTO 顺利运行。这是因为 VSTO 项目在由单独的应用程序(Office Word、Excel 等)调用的意义上是不同的。我不确定 Excel 启动时是如何进行调用的:例如,它调用的是解决方案还是项目?那么如果 Excel 处于打开状态并且我启动 Word,Word 是否能够接管对解决方案的至少一些控制,或者它是否会启动一个新实例?
  • VSTO 的一个关键功能是 Office 功能区。目前我无法让两个 Ribbons 一起工作,但这可能是由于一个单独的问题,为此我在这篇单独的帖子中提出了一个问题:stackoverflow.com/questions/54676630/…。实际上,在一个解决方案中包含 2 个 VSTO 意味着在创建解决方案后至少添加其中一个,这会导致上述帖子中提到的问题。

标签: c# vb.net vsto


【解决方案1】:

所以要跟进您的 cmets,发布和执行都是基于项目的。这就是 Visual Studio 有一个 StartUp 项目的原因。因此,一个解决方案中的多个项目似乎应该可以工作。

但如果您想同时调试多个加载项,您将需要两个 Visual Studio 实例,因此您不妨将它们保存在单独的解决方案中。如果你只想调试一个,你可以发布一个,运行它,然后从 VS 启动另一个。

如果您在它们之间共享代码,您仍然可以并且应该在两者中加载一个公共项目,并且 afaik 它将正常工作。

【讨论】:

  • 谢谢克里斯,这也是我的想法。但是,我无法运行任何测试,因为加载时我无法让 Word 和 Excel VSTO 都显示功能区。刚刚解决了这个问题(任何有兴趣的人,请参见此处:stackoverflow.com/questions/54676630/…)。我已经设法从一个 VS 解决方案调试了两个 VSTO 项目:在编译之前,将相关的 VSTO 项目设置为“StartUp”,它将相应地运行相关的应用程序(Excel/Word)。我还没有看到如果我打开另一个应用程序会发生什么..
  • 我尝试了几十种不同的配置(在 Excel VSTO 中添加对 Word VSTO 的引用、单独编译我​​的 CLass 库并手动将其粘贴到 ClickOnce 文件夹等)。看起来有两个问题:只有“StartUp”项目在注册表中注册。为不是“启动”的 VSTO 手动添加对 COM 加载项 .dll 文件的引用失败:“C:\...\...\MyVSTO.dll”不是有效的 Office 加载项。
  • 我无法理解您所说的内容。听起来您正试图从 Excel 加载项访问 Word 加载项。 [docs.microsoft.com/en-us/visualstudio/vsto/… 可能是可能的),但您可能能够使用两个加载项中引用的公共类库。可以分享一个用例吗?
  • 毫无疑问,您很难理解我想说的话; VSTO 对我来说很新(使用 VBA 已有 10 年):我缺乏对解决方案/项目/编译的控制和词汇。简单案例研究:1 个 Excel 插件项目、1 个 Word 插件项目、1 个 DLL 项目。 Excel 引用了 DLL,Word 引用了 DLL。 DLL 存储用户设置(例如语言)。我知道如何从 Word 和副 cersa 打开 Excel 文件,但这不是我在这里要做的。
  • 实际上我什至可以在两个插件之间不共享用户设置的情况下生活(好吧,用户必须在两个插件上复制其偏好,但这不是世界末日)。但是,我真的希望能够使用独特的 ClickOnce 设置部署这两个插件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多