SharpShell服务器.dll没有签名

时间:2016-03-14 15:09:36

标签: c# shell sharpshell

我需要开发一个Shell Context Menu扩展,引用其他一些自定义程序集......我不想为这些自定义程序集分配一个强名称密钥!

我遵循的guide 使用了SharpShell项目并说明了如何签署(但没有解释为什么)程序集...这是我的问题:如果我签署我的最终.dll然后我在我的项目构建阶段有很多错误,因为我的项目引用的一些程序集没有强名称("引用程序集没有强名称")。

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

不签署程序集ServerManager.exe会返回此错误:" The file 'XYZ.dll' is not a SharpShell Server"。

2 个答案:

答案 0 :(得分:1)

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

此外,我正在查看文章评论之间......请阅读this问题。

答案 1 :(得分:0)

您不需要使用旧的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);