私は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.Database
、UtilityLib,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
に指定できる属性はありますか?それとも単にソリューション自体を修正するのでしょうか?
私はこのことについてあまり知らないのですが、その名前を以前のバージョンから読んでその方法を永続させることはできますか?私はVB6が私にそれの前にそれのような何かをやっていることを思い出すようである。 – Rob
ライブラリ名はアセンブリ名と同じです。プロジェクト]> [プロパティ]> [ビルド]タブ> [アセンブリ名]の設定。 VB6プロジェクトがタイプライブラリの古いビルドを参照している可能性があるので、これを間違って取得するのはかなり難しいです。 –
@ハンス:ハァー - そうだよ。私はコードブラインドを持っていると思う:私はメソッド名、メソッド属性、アセンブリ属性などを使って他のすべてを制御できるので、私はプロジェクト設定を考慮せずに同じことを探していた。乾杯。答えとしてあなたのコメントをドロップ、私はupvoteとティックオフ、タ。 –