1

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

我遵循的指南使用 SharpShell 项目,并说明了如何签署(但没有解释为什么)程序集......这是我的问题:如果我签署我的最终 .dll,那么我在项目构建期间会遇到很多错误阶段,因为我的项目引用的某些程序集没有强命名(“引用的程序集没有强名称”)。

一般来说,在谷歌上搜索 C# Shell Extension 实现,我发现所有最好的教程都在最终程序集上签名......它是强制性的吗?

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

4

2 回答 2

3

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

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

于 2016-03-16T15:33:08.020 回答
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);
于 2017-11-01T11:16:40.390 回答