我有一個t4模板,可以根據數據庫表創建許多類。這些類需要暴露給COM,因此它們被聲明爲GuidAttribute
屬性。GuidAttribute動態聲明的類
每當我編譯項目,說來測試的東西,在測試環境中進行註冊,爲每個類定義創建新的GUID,和我開始擔心我可能會做壞事Windows註冊表。 ..
如果我編譯該項目,我有Class1
像
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA")]
public class Class1
{
...
}
,明天我想測試別的東西的定義和Class1
現在看起來像
[ComVisible(true)]
[ClassInterface(ClassInterfaceType.AutoDual)]
[GuidAttribute("BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB")]
public class Class1
{
...
}
以前的GUID是否會保留在註冊表中,還是註冊過程足夠聰明,可以從以前的註冊中刪除所有內容?
這整個問題可能來自於我的這些是什麼的GUID用於無知,以及他們如何涉及到的CLSID,但事實上,他們是爲了被宣佈靜態與類的定義,而我這樣做動態地讓我有些不安。
那麼你會說明確地聲明GUID對我來說是一個壞習慣嗎?我只是這樣做,因爲我在另一個問題中讀到,有必要讓客戶端*看到這個類的定義;例如,在將這些屬性添加到類中之前,在VB6項目中,Intellisense不會顯示成員信息... – ferc 2014-10-28 17:44:10
與[Guid]屬性無關。 ClassInterfaceType.AutoDual是啓動IntelliSense所需的類。本身並不是一個很好的方式,因爲它暴露了太多的信息。明確聲明接口並在實現它的類上使用ClassInterfaceType.None是更好的方法。 – 2014-10-28 17:48:18
我看到...是的,我剛剛從模板中刪除它,成員都可見:)。關於你不使用AutoDual的建議......你對「太多的信息」有什麼意思?你指的是像「Equals」,「GetType」這樣的.NET方法嗎?或者有什麼比AutoDual屬性更黑/更危險的事情? – ferc 2014-10-28 18:14:23