C# - 生成typelib - 指定库名?

时间:2016-10-31 16:23:55

标签: c# vb6 com-interop

我正在考虑将用VB6编写的一些遗留COM代码迁移到.NET,但是这需要生成一个与原始版本非常接近的类型库。

总的来说,一切正常。但是,regasm生成的typelib给出了一个我无法控制的库名。

生成的IDL的顶部(来自int)如下所示:

42

我想要匹配的具体声明是针对第10行的regasm backcompat.dll /tlb:backcompat.tlb,即// 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"); . . . (解决方案和DLL的名称)。

C#代码的命名空间为library,VB6中的原始类为BackCompatUtilityLib等;我可以使用ProgId属性强制执行的编号ID,但库名称本身似乎难以捉摸。

不幸的是,似乎因为库被声明为UtilityLib.Database,所以当尝试链接现有的使用早期绑定的VB6库时,构建失败,因为他们正在寻找UtilityLib,Guid:所以我必须更改源代码以引用BackCompat;即,VB6代码看起来像这样:

UtilityLib.{whatever}

必须改为:

BackCompat.{whatever}

虽然在一次点击中更改所有VB6将是不可思议的,但这不是一个选项:传统的VB6组件将随着时间的推移而被替换掉并用.NET替换。

重命名文件似乎无法解决此问题,因此必须从程序集本身获取名称。我可以在Dim dbConn As UtilityLib.Database 中指定一个属性来控制它,还是只是修复解决方案本身的情况?

2 个答案:

答案 0 :(得分:1)

汉斯在对该问题的评论中提到:

  

库名称与程序集名称相同。项目>   属性>构建标签> “程序集名称”设置。很难得到   这个错误,请考虑您的VB6项目可能引用旧的   构建类型库。

我没有考虑的事情(看了一切,没有考虑项目设置)。

答案 1 :(得分:0)

对于Visual Studio 2019中的C#:入门项目具有一个 Properties 文件夹,其中包含 AssemblyInfo.cs 。库帮助字符串似乎对应于

[assembly: AssemblyDescription("my project description")]