如何在VS2010中更改版本后保持CLSID不变 - 二进制兼容性? -

时间:2014-01-08 17:28:02

标签: vb.net vb6 wix dllregistration clsid

有人能告诉我如何在VS2010中使用二进制兼容性吗?

我有一个项目,我使用新的程序集文件构建,新版本更改了DLL的CLSID。

我已经在我的WiX软件包中使用硬编码的CLSID将该dll注册为com +,但如果要在每次构建时更改,则意味着我应该使用evey新版本更新我的WiX软件包。

任何想法?

编辑1

我应该提一下,这个CLSID是你的应用程序ID旁边出现在你在newley注册的Com +组件服务的属性窗口中的那个。我必须将它们硬编码到WiX文件中,以便在安装时注册

编辑2

以下是与我要求提供更多信息相关的其他问题的链接 WiX - Register ComPlus application and Assigning a role to a component

1 个答案:

答案 0 :(得分:1)

我已经找到了解决方案,感谢MSDN,

默认情况下,重建程序集时会为其分配一个新的版本号。这是因为Visual Studio .NET为新项目将AssemblyVersion属性设置为“1.0。*”。因此,每次重建程序集时,都会为服务组件生成新的类标识符(CLSID)。

注意 C#和Visual Basic .NET项目之间的行为略有不同。对于C#项目,每次重建时,程序集版本都会递增。对于Visual Basic .NET项目,在将项目加载到Visual Studio .NET后第一次重建项目时,程序集版本会递增。在Visual Studio .NET的同一实例中进行后续重建不会导致程序集版本递增。

这不代表问题,因为程序集版本仅用于没有强名称的程序集中的信息。对于强命名程序集,应使用手动维护的静态版本号。第5章“构建过程”中的控制程序集版本将进一步讨论此版本问题和其他版本控制问题。

为了控制服务组件在COM +目录中最终得到的CLSID,并避免每次开发人员重建服务组件时出现多个版本,请使用以下任一方法:

1。使用以下Guid属性显式控制CLSID:

[Guid("2136360E-FEBC-475a-95B4-3DDDD586E52A")]
public interface IFoo
{}

[TransactionAttribute(TransactionOption.Required),
Guid("57F01F20-9C0C-4e63-9588-720D5D537E66")]
public class Foo: ServicedComponent, IFoo
{}

2. 维护服务组件程序集的静态程序集版本号,不要使用Visual Studio .NET默认的“1.0。*”版本编号方案。有关程序集版本控制的更多信息,请参阅第5章“构建过程”中的“控制程序集版本”。

我使用了第一种方法。做了一个款待。

http://msdn.microsoft.com/en-us/library/ee817675.aspx