有人可以告诉我如何在 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 章“构建过程”中的控制程序集版本。
我用的是第一种方法。辛苦了。
关于vb.net - VS2010 版本更改后如何保持 CLSID 不变 - 二进制兼容性?-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21002474/