题
我需要部署同一C#.NET项目的多个版本。项目输出是用于本机应用程序中的COM Interop组件。我遇到的问题是,我必须并排部署该汇编的多个版本,但是我所做的一切似乎都不会创建不同的版本。相反,版本彼此覆盖。
我尝试更改汇编指南,尝试更改汇编版本号,尝试将汇编的强名称密钥重新生成,尝试更改汇编标题和描述。我宁愿不必为了版本的目的而更改组件中各个类型的GUID或名称。
我如何确保这些版本不会互相覆盖,并且可以并排部署它们?
提前致谢!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace InteropTest
{
[Guid("...")]
[ClassInterface(ClassInterfaceType.AutoDual)]
public class Test
{
public Test()
{
}
public string Version
{
get
{
return "1.0";
}
}
}
}
解决方案
我宁愿不必为了版本的目的而更改组件中各个类型的GUID或名称。
但是那 确切地 您需要做的事情来防止com类型彼此干扰。 [GUID]用于选择注册COM类的HKLM Software Class CLSID中的注册表密钥。具有相同GUID的两个不同版本将覆盖彼此的密钥。否则被称为DLL地狱。更改公共界面 需要 一个新的GUID,以确保使用旧的客户不会死亡,无法诊断不当行为。岩石com的要求。
省略[GUID]属性是很可能的,您现在将其保留到CLR上为您生成一个。现在,汇编属性开始扮演角色,GUID值是由包含汇编名称和版本以及接口及其参数的一组方法的光滑算法自动生成的。因此确保了这一点 任何 自动化产生不同的GUID。而且,正如预期和所需的那样,不同的[汇编]将产生不同的[GUID]。
另一种方法,这是我认为您的意思是“并排”,就是 不是 注册组件,但要依靠清单。它必须嵌入客户端程序中,您使用 <clrClass>
元素要声明您的[可笑]类。版本控制现在成为部署细节。 MSDN操作方法 在这儿. 。请记住,它必须嵌入 客户 程序,而不是您的[可见]组件。这往往是一个问题。
其他提示
如果可以的话,请尝试将本机应用程序中的iNterop组件绑定到Interop组件。我还建议不要使用自动模拟自动生成界面,而是明确生成自己的读取 这个 有关更多信息。您可以通过打开Regedit并搜索GUID和PROGID来查看已注册哪些版本的GUID和PROGID来解决问题。