2

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

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

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

有任何想法吗 ??

编辑 1

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

编辑 2

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

4

1 回答 1

2

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

于 2014-01-14T14:15:07.720 回答