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);
我需要开发一个 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);