VSIX 在另一个 DLL 中找不到静态方法
VSIX can't find a static method in another DLL
问题
我有一个在我的 VSIX 项目中引用的静态(扩展方法)。当我编译 VSIX 项目时,我可以在 bin/debug 文件夹中看到 dll 以及 VSIX dll(同一文件夹)。
此外,intellisense对此没有问题,编译也没有问题!当我 运行 VSIX 项目处于调试模式时。我看到这个错误:
"Method not found: "System.String MethodName(System.String)" 这是另一个程序集中的扩展方法(在 bin/debug文件夹)。
我读过其他 post 类似的内容:
Can't find VSIX dlls with DllImport
这两种解决方案对我来说都不合适,毕竟,dll 位于正确的文件夹中,它找到了自己的代码,但找不到其他程序集...。引用和使用语句以及智能感知工作!
这告诉我这是一个加载程序问题,不知何故 VSIX 项目无法加载其他引用的程序集,或者可能是设计使然。
我试过将它们作为资产加载,但它们不是 "other" VSIX 项目,因此所有资产选项都没有了。
但是请注意,这些资产类型都带有前缀 Microsoft.VisualStudio。我试过 Microsoft.VisualStudio.Assembly 但它们不起作用,事实上它搞砸了试图这样做的清单。
另一个奇怪的地方是,我确实包含了对作为 EXE 出现的另一个程序集的引用。所有这些方法都可以正常工作。只是没有加载的 dll。对于这些,我不能使用 USING 语句,而是必须使用完全限定的 NameSpace 名称才能使其工作......但是如果我在 DLL 上尝试相同的技巧,它就不起作用。
一个 post 建议将程序集手动添加到清单文件中...但是 post 是在 2010 年。
这也不行:
要在 VSIX 包中包含来自引用程序集的附属 DLL,请将 SatelliteDllsProjectOutputGroup 添加到 VSIX 中包含的输出组 属性。
我错过了什么?
此问题的根本原因是默认情况下 VSIX 希望所有内容都具有强名称。由于未签名的第 3 方 DLL,我未选中该选项。我能够获得来源和 "Strong Name" 他们。
然后我将 VSIX 项目命名为强命名并且一切正常。
转到项目的属性页面:
我开始研究这样的工具,它可以在无法获得源代码时强命名 DLL。
问题 我有一个在我的 VSIX 项目中引用的静态(扩展方法)。当我编译 VSIX 项目时,我可以在 bin/debug 文件夹中看到 dll 以及 VSIX dll(同一文件夹)。
此外,intellisense对此没有问题,编译也没有问题!当我 运行 VSIX 项目处于调试模式时。我看到这个错误:
"Method not found: "System.String MethodName(System.String)" 这是另一个程序集中的扩展方法(在 bin/debug文件夹)。
我读过其他 post 类似的内容:
Can't find VSIX dlls with DllImport
这两种解决方案对我来说都不合适,毕竟,dll 位于正确的文件夹中,它找到了自己的代码,但找不到其他程序集...。引用和使用语句以及智能感知工作!
这告诉我这是一个加载程序问题,不知何故 VSIX 项目无法加载其他引用的程序集,或者可能是设计使然。
我试过将它们作为资产加载,但它们不是 "other" VSIX 项目,因此所有资产选项都没有了。
但是请注意,这些资产类型都带有前缀 Microsoft.VisualStudio。我试过 Microsoft.VisualStudio.Assembly 但它们不起作用,事实上它搞砸了试图这样做的清单。
另一个奇怪的地方是,我确实包含了对作为 EXE 出现的另一个程序集的引用。所有这些方法都可以正常工作。只是没有加载的 dll。对于这些,我不能使用 USING 语句,而是必须使用完全限定的 NameSpace 名称才能使其工作......但是如果我在 DLL 上尝试相同的技巧,它就不起作用。
一个 post 建议将程序集手动添加到清单文件中...但是 post 是在 2010 年。
这也不行:
要在 VSIX 包中包含来自引用程序集的附属 DLL,请将 SatelliteDllsProjectOutputGroup 添加到 VSIX 中包含的输出组 属性。
我错过了什么?
此问题的根本原因是默认情况下 VSIX 希望所有内容都具有强名称。由于未签名的第 3 方 DLL,我未选中该选项。我能够获得来源和 "Strong Name" 他们。
然后我将 VSIX 项目命名为强命名并且一切正常。
转到项目的属性页面:
我开始研究这样的工具,它可以在无法获得源代码时强命名 DLL。