我用 SharpShell 编写了这个简单的 shell 扩展(资源管理器上下文菜单):
[ComVisible(true)]
[COMServerAssociation(AssociationType.AllFiles)]
public class SampleExtension : SharpContextMenu
{
protected override bool CanShowMenu()
{
return true;
}
protected override ContextMenuStrip CreateMenu()
{
var menu = new ContextMenuStrip();
var item = new ToolStripMenuItem
{
Text = "Hello world!"
};
menu.Items.Add(item);
return menu;
}
}
它可以与 SharpShell 服务器管理器一起调试,但是当我尝试通过srm.exe
命令行安装它时,我得到:
srm.exe install ..\SampleExtension\bin\Debug\CountLinesExtension.dll -codebase
System.ComponentModel.Composition.CompositionContractMismatchException was unhandled
HResult=-2146233088
Message=Cannot cast the underlying exported value of type 'SharpShell.SharpShellServer (ContractName="SharpShell.ISharpShellServer")' to type 'SharpShell.ISharpShellServer'.
Source=System.ComponentModel.Composition
StackTrace:
at System.ComponentModel.Composition.ExportServices.CastExportedValue[T](ICompositionElement element, Object exportedValue)
at System.ComponentModel.Composition.ExportServices.GetCastedExportedValue[T](Export export)
at System.ComponentModel.Composition.ExportServices.<>c__DisplayClassa`1.<CreateStronglyTypedLazyOfT>b__7()
at System.Lazy`1.CreateValue()
at System.Lazy`1.LazyInitValue()
at System.Lazy`1.get_Value()
at ServerRegistrationManager.Application.<LoadServerTypes>b__2(Lazy`1 st)
at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext()
at ServerRegistrationManager.Application.InstallServer(String path, RegistrationType registrationType, Boolean codeBase)
at ServerRegistrationManager.Application.Run(String[] args)
at ServerRegistrationManager.Program.Main(String[] args)
如何解决这个问题?