總結一下今天碰到的一個問題:
之前用C#寫了一個組件,現在有一個asp的程式也要使用同樣的功能,也就是要讓asp調用這個.net程式集
OK, 下面開始:
1. regasm ConvertHelper.dll /tlb:ConvertHelper.tlb
2. 在asp程式中使用.
在第2步時提示CreateObject出錯,
然而,在我設定了:項目名稱->點右鍵"屬性"->配置屬性->產生->將"為Com Interop註冊"改為true,重新編譯組件後一切正常,asp程式調用無誤,百思不得其解,這兩種方法的區別在於一個手動註冊,一個自動註冊,難道是vs.net 2003的IDE還做了其他什麼設定,沒辦法,只有求助於google,搜過一遍之後發現下邊一篇文章:
http://comcamp.myrice.com/techarticles/com/2013.htm
裡面提到有註冊後的註冊表內容,會不會我的手動註冊丟了什麼,於是開始做比較,首先將註冊表設定匯出到reg檔案:
regasm ConvertHelper.dll /regfile: ConvertHelper.reg
用記事本開啟ConvertHelper.reg檢查,果真發現少了個CodeBase的設定,查詢MSDN得出CodeBase的說明如下:
/CodeBase : 在註冊表中建立一個 Codebase 項。Codebase 項指定未安裝到全域組件快取中的程式集的檔案路徑。如果隨後要安裝正在註冊到全域組件快取中的程式集,則不應指定此選項。用 /codebase 選項指定的 assemblyFile 參數必須是。
現在明白了,如果你要註冊的.NET程式集沒有強式名稱的話,那麼在使用regasm註冊的時候就要加上/CodeBase
重新開始註冊過程:
1.regasm ConvertHelper.dll /tlb:ConvertHelper.tlb /CodeBase
2.asp程式進行調用
OK, 一切正常,問題解決了!!