2016-10-31 7 views
2

私はVB6で書かれたレガシーCOMコードを.NETに移行することを検討していますが、これはオリジナルにかなり近いタイプライブラリを生成する必要があります。C# - typelibを生成する - ライブラリ名を指定しますか?

全体的にすべてが機能します。しかし、regasmによって生成されたtypelibは、私が制御できないようなライブラリ名を与えています。

regasm backcompat.dll /tlb:backcompat.tlbから)生成されたIDLのトップは、次のようになります。

// Generated .IDL file (by the OLE/COM Object Viewer) 
// 
// typelib filename: BackCompat.tlb 

[ 
    uuid(BF1F4E76-8F4A-420E-A58A-E041600AC02A), 
    version(1.0), 
    helpstring(".NET replacement for legacy VB objects") 
] 
library BackCompat 
{ 
    // TLib :  // TLib : mscorlib.dll : {BED7F4EA-1A96-11D2-8F08-00A0C9A6186D} 
    importlib("mscorlib.tlb"); 
    // TLib : Microsoft ActiveX Data Objects 6.1 Library : {B691E011-1797-432E-907A-4D8C69339129} 
    importlib("msado15.dll"); 
    // TLib : : {4FB2D46F-EFC8-4643-BCD0-6E5BFA6A174C} 
    importlib("System.EnterpriseServices.tlb"); 
    . 
    . 
    . 

私が一致しようとしている具体的な宣言があることはBackCompatとして出ているライン10上のlibraryに反している(の名前ソリューションとDLL)。

C#コードのネームスペースはUtilityLibであり、VB6の元のクラスはUtilityLib.DatabaseUtilityLib,Guidなどです。私はProgId属性で強制することができますが、ライブラリ名自体は分かりにくいものです。

残念ながら、ライブラリがBackCompatと宣言されているため、初期バインディングを使用している既存のVB6ライブラリとリンクしようとすると、ビルドに失敗してUtilityLib.{whatever}が見つかりました。ソースコードを変更する必要があります参照するためにBackCompat.{whatever};このようになりますつまり、VB6のコードは:

Dim dbConn as BackCompat.Database 

1ヒット中のすべてのVB6を変更することが素晴らしいだろうけれども、これはオプションではありません:レガシーVB6コンポーネント

Dim dbConn As UtilityLib.Database 

に変更する必要があります時間の経過とともにスワップアウトされ、.NETのものに置き換えられます。

ファイルの名前を変更しても解決しないようですので、アセンブリ自体から名前を取得する必要があります。これを制御するためにAssemblyInfo.csに指定できる属性はありますか?それとも単にソリューション自体を修正するのでしょうか?

+0

私はこのことについてあまり知らないのですが、その名前を以前のバージョンから読んでその方法を永続させることはできますか?私はVB6が私にそれの前にそれのような何かをやっていることを思い出すようである。 – Rob

+1

ライブラリ名はアセンブリ名と同じです。プロジェクト]> [プロパティ]> [ビルド]タブ> [アセンブリ名]の設定。 VB6プロジェクトがタイプライブラリの古いビルドを参照している可能性があるので、これを間違って取得するのはかなり難しいです。 –

+0

@ハンス:ハァー - そうだよ。私はコードブラインドを持っていると思う:私はメソッド名、メソッド属性、アセンブリ属性などを使って他のすべてを制御できるので、私はプロジェクト設定を考慮せずに同じことを探していた。乾杯。答えとしてあなたのコメントをドロップ、私はupvoteとティックオフ、タ。 –

答えて

1

質問へのコメントでハンスで述べたように:

ライブラリ名はアセンブリ名と同じです。プロジェクト> プロパティ> [ビルド]タブ> [アセンブリ名]の設定。かなり難しい これを間違って、あなたのVB6プロジェクトがタイプライブラリの古い ビルドを参照している可能性があると考えてください。

私が考えなかったこと(他のすべてを見て、プロジェクトの設定を考慮しなかった)。

関連する問題