SharpShell 服务器 .dll 未签名

SharpShell server .dll NOT signed

我需要开发一个 Shell 引用其他自定义程序集的上下文菜单扩展...我不想为那些自定义程序集分配强名称键!

我遵循的 guide 使用 SharpShell 项目并说明了如何签署(但不解释原因)程序集...这是我的问题:如果我签署我的最终 .dll 然后我在项目的构建阶段有很多错误,因为我的项目引用的某些程序集没有强命名 ("Referenced assembly does not have a strong name")。

一般来说,谷歌搜索 C# Shell 扩展实现,我找到的所有最好的教程都签署了最终程序集...它是强制性的吗?

没有签署程序集 ServerManager.exe returns 此错误:“The file 'XYZ.dll' is not a SharpShell Server”。

终于解决了我的烦恼...通过NuGet 获得的SharpShell.dll 文件与ServerManager.exe 文件是不同版本的。 卸载 SharpShell NuGet 包并直接引用您在 ServerManager 文件夹中找到的 SharpShell.dll 是我的解决方案!

此外,我在文章评论之间寻找...请阅读this问题。

您不需要使用旧的 DLL。 请直接使用此代码,不要使用 ServerManager.exe.

private static ServerEntry serverEntry = null;
        public static ServerEntry SelectedServerEntry
        {
            get
            {
                if (serverEntry == null)
                    serverEntry = ServerManagerApi.LoadServer("xxx.dll");
                return serverEntry;
            }
        }

public static ServerEntry LoadServer(string path)
        {
            try
            {
                //  Create a server entry for the server.
                var serverEntry = new ServerEntry();

                //  Set the data.
                serverEntry.ServerName = Path.GetFileNameWithoutExtension(path);
                serverEntry.ServerPath = path;

                //  Create an assembly catalog for the assembly and a container from it.
                var catalog = new AssemblyCatalog(Path.GetFullPath(path));
                var container = new CompositionContainer(catalog);

                //  Get the exported server.
                var server = container.GetExport<ISharpShellServer>().Value;

                serverEntry.ServerType = server.ServerType;
                serverEntry.ClassId = server.GetType().GUID;
                serverEntry.Server = server;

                return serverEntry;
            }
            catch (Exception)
            {
                //  It's almost certainly not a COM server.
                MessageBox.Show("The file '" + Path.GetFileName(path) + "' is not a SharpShell Server.", "Warning");
                return null;
            }
        }

安装代码:

ServerRegistrationManager.InstallServer(SelectedServerEntry.Server, RegistrationType.OS64Bit, true);

注册码:

ServerRegistrationManager.RegisterServer(SelectedServerEntry.Server, RegistrationType.OS64Bit);