我刚刚完成了从Visual Studio 2008到Visual Studio 2010的一系列C#项目的重组和升级.此外,所有项目都更改为以.NET 4.0运行时为目标.一切都成功构建但是,我现在得到一堆与我的应用程序所依赖的COM引用相关的警告.其中一个警告如下.每次构建解决方案时,我都会收到类似于下面的100个警告.
Warning 60 Type library importer encountered a property getter 'ClearTopCardQue' on type 'FuelDirectOLETLB.FuelDirectOLE' without a valid return type. The importer will attempt to import this property as a method instead. c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets 1558 9 FDServer
Run Code Online (Sandbox Code Playgroud)
我已经打电话给第三方供应商创作了我引用的对象无济于事.他们建议我确保我的目标是x86.他们还表示我应该能够针对任何版本的.NET运行时构建我的项目.就个人而言,我怀疑它与我在Visual Studio 2010/.NET Runtime 4.0中引用版本1类型库的事实有关,而在我构建VS 2008/.NET Runtime 3.5之前.我尝试构建针对所有构建配置(即x86,x64,Any Cpu)并尝试将每个版本的运行时恢复为2.0.警告关注我,因为我不确定他们指出了什么.有人可以提出任何可能有助于我找到这些警告原因的建议/建议吗?
Han*_*ant 18
这是一个良性警告,无需担心.他们只是没有正确地为组件编写IDL.COM中的属性getter是方法,就像它们在.NET中一样.该方法必须具有适当的签名和属性才能被视为可以直接转换为.NET属性的有效属性.
有时这是偶然的.一个很好的例子是Windows Media Player.从临时目录中的Visual Studio命令提示符运行此命令:
Tlbimp.exe c:\windows\system32\wmp.dll
Run Code Online (Sandbox Code Playgroud)
你会看到:
TlbImp:警告TI0000:类型库导入器在类型为'WMPLib.IWMPNowPlayingHelperDispatch'时遇到属性getter'sessionPlaylistCount'而没有有效的返回类型.导入器将尝试将此属性作为方法导入.
键入库导入到WMPLib.dll
下一个类型:
Oleview.exe c:\windows\system32\wmp.dll
Run Code Online (Sandbox Code Playgroud)
它将类型库反编译回IDL.选择右窗格中的文本,然后将其复制/粘贴到文本编辑器中.找到"sessionPlaylistCount",你会看到:
[id(0x00000ba3), propget]
HRESULT sessionPlaylistCount([out] long* pVal);
Run Code Online (Sandbox Code Playgroud)
当你将它与其他属性进行比较时,你会看到错误,他们忘记了[retval]属性.
这不是问题,因为Tlbimp.exe只会使它成为一种方法而不是属性.你写的get_sessionPlaylistCount(out count)是使用破碎的财产.这是不方便的,因为语法很尴尬,但不是一个问题.