问题 我有一个在我的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项目,因此所有资产选项都已淘汰。
请注意,这些资产类型都以Microsoft.VisualStudio为前缀。我已经尝试过Microsoft.VisualStudio.Assembly并且它们不起作用,事实上它搞砸了尝试这样做的清单。
另一个奇怪的是,我确实包含了另一个作为EXE进入的程序集的引用。所有这些方法都运行良好。这只是没有加载的dll。对于这些,我不能使用USING语句而是,我必须使用完全限定的NameSpace名称才能使它工作......但是如果我在DLL上尝试相同的技巧它不起作用。
有一篇帖子建议手动将程序集添加到清单文件中......但该帖子是在2010年。
这也不起作用:
要在VSIX包中包含引用程序集中的附属DLL,请将SatelliteDllsProjectOutputGroup添加到VSIX属性中包含的输出组。
我错过了什么?
答案 0 :(得分:0)
此问题的根本原因是默认情况下VSIX希望所有内容都是强名称。由于没有签名的第三方DLL,我取消选中该选项。我能够得到消息来源和#34;强名称"他们。
然后我强大地命名了VSIX项目,一切正常。
转到项目的属性页面:
我开始研究这样的工具,当源代码无法获得时,它可以强有力地命名DLL。