VSIX在另一个DLL中找不到静态方法

时间:2016-05-05 23:34:14

标签: c# visual-studio vsix

问题  我有一个在我的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在正确的文件夹中,它找到了自己的代码,但没有找到其他程序集....引用和使用语句和intellisense工作!

这告诉我这是一个加载器问题,某种程度上VSIX项目无法加载其他引用的程序集,或者它可能是设计的。

我已经尝试将它们作为资产加载,但它们不是“其他”VSIX项目,因此所有资产选项都已淘汰。

enter image description here

请注意,这些资产类型都以Microsoft.VisualStudio为前缀。我已经尝试过Microsoft.VisualStudio.Assembly并且它们不起作用,事实上它搞砸了尝试这样做的清单。

另一个奇怪的是,我确实包含了另一个作为EXE进入的程序集的引用。所有这些方法都运行良好。这只是没有加载的dll。对于这些,我不能使用USING语句而是,我必须使用完全限定的NameSpace名称才能使它工作......但是如果我在DLL上尝试相同的技巧它不起作用。

有一篇帖子建议手动将程序集添加到清单文件中......但该帖子是在2010年。

这也不起作用:

要在VSIX包中包含引用程序集中的附属DLL,请将SatelliteDllsProjectOutputGroup添加到VSIX属性中包含的输出组。

我错过了什么?

1 个答案:

答案 0 :(得分:0)

此问题的根本原因是默认情况下VSIX希望所有内容都是强名称。由于没有签名的第三方DLL,我取消选中该选项。我能够得到消息来源和#34;强名称"他们。

然后我强大地命名了VSIX项目,一切正常。

转到项目的属性页面:

enter image description here

我开始研究这样的工具,当源代码无法获得时,它可以强有力地命名DLL。

https://brutaldev.com/post/net-assembly-strong-name-signer