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

标签 vb.net vb6 wix dllregistration clsid

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

我有一个项目,每当我使用新的程序集文件构建时,新版本都会更改 dll 的 CLSID。

我已经在我的 WiX 包中使用硬编码的 CLSID 将该 dll 注册为 com+,但如果它在每个版本上都发生更改,则意味着我应该使用每个新版本更新我的 WiX 包。

有什么想法吗?

编辑1

我应该提到的是,这个 CLSID 与您在组件服务中新注册的 Com+ 的属性窗口中的应用程序 ID 一起显示。我必须将它们硬编码到 WiX 文件中,以便在安装时注册

编辑2

这是另一个问题的链接,该问题与我要求的更多信息相关 WiX - Register ComPlus application and Assigning a role to a component

最佳答案

感谢 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

关于vb.net - VS2010 版本更改后如何保持 CLSID 不变 - 二进制兼容性?-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002474/

相关文章:

wix - 提升的即时自定义操作

C# - 如何读取和写入二进制文件?

vb.net - 签名工具错误 : Invalid option:/fd

.net - VB 6/.NET 互操作最近是否被 Windows 更新破坏了?

com - VB6编译时可以使用.local文件避免注册COM ocx和dll文件吗

wix - 使用 WiX 安装无论版本号如何的文件

vb.net - 如何通过键入 EXIT 来关闭控制台应用程序?

VB.net DataGridView 更改 Cell.FormattedValue

VB6 ADO 连接 - 如何检查是否在事务中?

wix - 如何正确运行 heat.exe 工具以生成与 InstallScope ='perUser' 兼容的 Wix 代码?