Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net 如何在VS2010-二进制兼容性中更改版本后保持CLSID不变-_Vb.net_Vb6_Wix_Dllregistration_Clsid - Fatal编程技术网

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

Vb.net 如何在VS2010-二进制兼容性中更改版本后保持CLSID不变-,vb.net,vb6,wix,dllregistration,clsid,Vb.net,Vb6,Wix,Dllregistration,Clsid,有人能告诉我如何在VS2010中使用二进制兼容性吗 我有一个项目,每次使用新版本的新程序集文件构建时,都会更改dll的CLSID 我已经在我的WiX包中使用了这个CLSID硬编码来将这个dll注册为com+,但是如果它在每个构建中都改变,那就意味着我应该用每个新版本更新我的WiX包 有什么想法吗 编辑1 我应该提到,这个CLSID是在组件服务中newley注册的Com+的属性窗口中与应用程序ID一起出现的。我必须将它们硬编码到WiX文件中,以便在安装时注册 编辑2 这里是另一个问题的链接,这个问

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

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

我已经在我的WiX包中使用了这个CLSID硬编码来将这个dll注册为com+,但是如果它在每个构建中都改变,那就意味着我应该用每个新版本更新我的WiX包

有什么想法吗

编辑1

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

编辑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章“构建过程”中的控制程序集版本

我使用了第一种方法。工作很愉快


您是否在vb.net代码中指定了类的
Guid
属性?是的,它设置了特定的Guid。没有它会发生什么@梅迪诺如果它被设置好了,我不明白它会发生什么变化。我知道一些GUI会随着安装程序包中的版本而变化(尽管我从未使用过WiX,但我确实使用过VS2005部署项目,产品代码也会随着版本而变化),我不知道如果你一成不变,CoClass的CLSID会如何自动变化。。。或者你在问题中指的是另一种GUID,而不是实际的CLSID?我想我指的是不同的CLSID。。。当您将dll注册为COM+组件和RHM并转到“属性”时,将显示CLSID和应用程序ID。当我将程序集版本更改为dn文件版本时,重新生成项目并重新注册,然后CLSID将不同,如果我恢复,则CLSID将恢复为其原始值。因此,它在每个版本上都是恒定的@但CLSID不应随版本更改。。。通常,当您用.Net语言为COM可见程序集编写coclass时,您在属性(
System.Runtime.InteropServices.GuidAttribute
)中指定它的CLSID,就在
关键字之前…这就是我一直告诉您要做的,而您一直告诉我它不起作用…是的,但是你从来没有提到过我的“[TransactionAttribute(TransactionOption.Required)”,我的设置为“RequiresNew”,加上我的回复,并给了你信任:)啊,我误解了你的解决方案。我不知道
TransactionAttribute
对GUI有任何影响。