(编辑:。解决了,解决办法很简单 - 打造2008SP1,以产生Interop.NetFwTypeLib.dll,只是把它作为一个第三方组件,感谢里克Sladkey)VS2010 COM互操作错误解决方法? (INetFwMgr)
我已经升级了一些引用COM对象的代码(在下面)到VS 2010.仍然在.NET 3.5上。
构建从此刻破:(The type or namespace name 'INetFwMgr' could not be found (are you missing a using directive or an assembly reference?)
)...
我发现了一个Microsoft bug,如果有人说:
SDK 4.0 tlbimp.exe是始终进口 第一个,它不请按照 正确的流。即使你手动 调用tlbimp.exe并给出正确的 路径。这是 问题的根本原因。任何驻留在 非默认流中的COM dll与4.0的tlbimp.exe将有相同的 问题。
而且依次为:
SDK 3.5 tlbimp.exe是没有这个 问题。一个解决方法是使用3.5 tlbimp.exe是从作为 它存储在注册表中的完整路径和 参考此互操作程序集在 您的项目手动导入 Interop程序集。
有人可以解释解决方法吗? (我尝试了明显的tlbimp COM_DLL /out=OUT_DLL
,不行)。
有人遇到过与另一个COM?
谢谢!
注意:XP ...
还有一点需要注意的是:试用了VS2010 SP1,没有运气。
代码(局部...):
using NetFwTypeLib;
namespace Utils
{
public class MSFirewall
{
private const string CLSID_FIREWALL_MANAGER = "{304CE942-6E39-40D8-943A-B913C40C9CD4}";
private NetFwTypeLib.INetFwMgr GetFirewallManager()
{
Type objectType = Type.GetTypeFromCLSID(new Guid(CLSID_FIREWALL_MANAGER));
return Activator.CreateInstance(objectType) as NetFwTypeLib.INetFwMgr;
}
}
}
就像我刚才提到的那样,我在2008年的命令提示符下试过'tlbimp COM_DLL/out = OUT_DLL',引用该dll-不行。难道我做错了什么? – 2011-04-14 08:35:35
你正在为自己创造工作!在将您的项目移植到VS2010之前,您在obj文件夹中有一个完美的Interop.NetFwTypeLib.dll。只用那个。 – 2011-04-15 05:23:46