【发布时间】:2016-08-31 21:51:11
【问题描述】:
问题 我有一个在我的 VSIX 项目中引用的静态(扩展方法)。当我编译 VSIX 项目时,我可以在 bin/debug 文件夹中看到 dll 以及 VSIX dll(同一文件夹)。
另外,intellisense 没有这个问题,编译也没有!当我在调试模式下运行 VSIX 项目时。我看到了这个错误:
“未找到方法:“System.String MethodName(System.String)”,这是另一个程序集中的扩展方法(在 bin/debug 文件夹中)。
我读过其他类似的帖子:
Can't find VSIX dlls with DllImport
Include external .dll in Visual Studio Extension
这两种解决方案在我看来都不正确,毕竟 dll 位于正确的文件夹中,它找到了自己的代码,但没有找到其他程序集......引用和 using 语句以及智能感知工作!
这告诉我这是一个加载程序问题,不知何故 VSIX 项目无法加载其他引用的程序集,或者它可能是设计使然。
我尝试将它们加载为资产,但它们不是“其他”VSIX 项目,因此所有资产选项都已退出。
但请注意,这些资产类型都以 Microsoft.VisualStudio 为前缀。我已经尝试过 Microsoft.VisualStudio.Assembly 并且它们不起作用,实际上它搞砸了试图这样做的清单。
另一个奇怪的是,我确实包含了对另一个作为 EXE 出现的程序集的引用。所有这些方法都可以正常工作。只是没有加载的dll。对于这些,我不能使用 USING 语句,我必须使用完全限定的 NameSpace 名称才能使其工作......但如果我在 DLL 上尝试相同的技巧,它就不起作用。
一篇文章建议将程序集手动添加到清单文件中……但那篇文章是在 2010 年。
这也不起作用:
要在 VSIX 包中包含来自引用程序集的附属 DLL,请将 SatelliteDllsProjectOutputGroup 添加到 VSIX 属性中包含的输出组。
我错过了什么?
【问题讨论】:
标签: c# visual-studio vsix