2014-01-08 70 views
1

有人能告訴我如何在VS2010中使用二進制兼容性嗎?如何在VS2010中更改版本後保持CLSID不變 - Binary compatibility? -

我有一個項目,超時我建立一個新的程序集文件與新版本更改DLL的CLSID。

我已經在我的WiX包中使用硬編碼的CLSID將該dll註冊爲com +,但是如果要在每個構建中更改,則意味着我應該使用evey新版本更新我的WiX包。

任何想法??

編輯1

我應該指出,這是CLSID沿側出現在您的應用程序ID在你的組件服務註冊的COM +紐利的屬性窗口中的一個。我必須將它們硬編碼到WiX的文件,因此它被註冊上安裝

編輯2

這裏是正在與想查詢更多信息,我另外一個問題一個鏈接 WiX - Register ComPlus application and Assigning a role to a component

+1

你指定你的vb.net代碼上您的課'Guid'屬性? – Medinoc

+0

是的,它有一個特定的GUID集。沒有它會發生什麼? @Medinoc –

+0

如果確定了,我不明白它會如何改變。我知道一些GUID將隨安裝程序包中的版本發生變化(儘管我從未使用過WiX,我使用過VS2005部署項目,並且產品代碼隨版本發生了變化)。我不明白如果您設置了CoClass的CLSID如何自動更改它在石頭上。 * ...也許你的意思是在你的問題中的另一種GUID,而不是一個實際的CLSID?* – Medinoc

回答

1

我已經找到了解決方案,感謝MSDN,

默認情況下,當您重建一個部件時,它會被分配一個新的版本號。這是因爲Visual Studio .NET爲新項目設置了AssemblyVersion屬性爲「1.0。*」。因此,每次重新構建程序集時,都會爲服務組件生成新的類標識符(CLSID)。

注意此行爲在C#和Visual Basic .NET項目之間略有不同。對於C#項目,程序集版本在每次重建時都會增加。對於Visual Basic .NET項目,程序集版本在加載到Visual Studio .NET中後首次重建時會增加。隨後在Visual Studio .NET的同一實例中重建不會導致程序集版本增加。

這並不代表問題,因爲程序集版本僅用於沒有強名稱的程序集中的信息。對於強壯的指定程序集,應使用手動維護的靜態版本號。本章以及其他版本控制問題將在第5章「構建過程」中的控制組件版本中進一步討論。

爲了控制該提供服務的CLSID組件與COM +目錄結束,並避免每一個顯影劑重建服務組件時出現的多個版本,可使用下列方法之一:

1.明確通過使用下列GUID屬性控制CLSID:「1.0 *」

[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默認版本編號方案。有關程序集版本控制的更多信息,請參閱第5章「構建過程」中的控制程序集版本。

我用第一種方法。工作過一種享受。

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

+0

這就是我一直告訴你這樣做,並且你一直告訴我它沒有工作... – Medinoc

+0

是的,但你從來沒有提到 '[TransactionAttribute(TransactionOption.Required)'我被設置爲'RequiresNew' 加我評論回來,並給你信貸:) –

+0

啊,我誤解了你的解決方案。我不知道'TransactionAttribute'對GUID有什麼影響。 – Medinoc

相關問題