C# 通过COM互操作引用程序集时未找到Protobuf net文件或程序集

C# 通过COM互操作引用程序集时未找到Protobuf net文件或程序集,c#,com,interop,protobuf-net,C#,Com,Interop,Protobuf Net,我试图用C#为protobuf net包编写一个包装器,使我能够直接从excel中的VBA访问协议缓冲区文件。 我编写的代码引用了通过nuget包管理器添加的protobuf net。我已使我的程序集COM可见,并且可以从VBA访问我的类。 但是,当我尝试加载protobuffer文件时,会收到以下消息: 无法加载文件或程序集的protobuf net,版本=2.0.0.668, 区域性=中性,PublicKeyToken=257b51d87d2e4d67'或其 依赖项。系统找不到指定的文件。

我试图用C#为protobuf net包编写一个包装器,使我能够直接从excel中的VBA访问协议缓冲区文件。 我编写的代码引用了通过nuget包管理器添加的protobuf net。我已使我的程序集COM可见,并且可以从VBA访问我的类。
但是,当我尝试加载protobuffer文件时,会收到以下消息:

无法加载文件或程序集的protobuf net,版本=2.0.0.668, 区域性=中性,PublicKeyToken=257b51d87d2e4d67'或其 依赖项。系统找不到指定的文件。 (ProtoBuFinInterface.OutputData)”

我已检查protobuf-net.dll文件是否正在复制到程序集目录。你知道这是什么原因吗?或者我能做些什么来修复它


非常感谢

protobuf-net.dll还依赖于您应该添加到引用中的其他dll

如果未明确指定它们,则应使用类似“depends.net”的实用程序。更多信息可在此链接中找到:


protobuf-net.dll还依赖于您应该添加到引用中的其他dll

如果未明确指定它们,则应使用类似“depends.net”的实用程序。更多信息可在此链接中找到:


我使用.NET Reflector发现了问题。 我引用了另外两个库,一个是protobuf-net.dll,另一个是引用protobuf-net.dll的第三方库。 问题是第三方库(2.0.0.668)中引用的版本与我安装的版本(2.3.3)不同。事实上,事后来看,错误信息告诉了我所需要的一切。 用2.0.0.668版本替换protobuf-net.dll引用修复了我的问题。我不需要在GAC中单独注册protobuf-net.dll


谢谢你们一路上的帮助。非常感谢。

我使用.NET Reflector发现了问题。 我引用了另外两个库,一个是protobuf-net.dll,另一个是引用protobuf-net.dll的第三方库。 问题是第三方库(2.0.0.668)中引用的版本与我安装的版本(2.3.3)不同。事实上,事后来看,错误信息告诉了我所需要的一切。 用2.0.0.668版本替换protobuf-net.dll引用修复了我的问题。我不需要在GAC中单独注册protobuf-net.dll


谢谢你们一路上的帮助。非常感谢。

eugh;COM依赖性是一种巨大的痛苦;作为一个懒惰可怕的黑客,只是为了看看它是否有效:如果你在GAC中安装它(protobuf-net),它是否有效?嘿,马克。谢谢你的快速回复。抱歉,我对这一点很陌生-你能解释一下我如何在GAC中安装protobuf net吗?感谢您对于[ComVisible]程序集,CLR搜索依赖程序集的方式不会改变。它首先在GAC中查找,然后在EXE的目录中查找。并且不在存储DLL的目录中。强烈建议为客户端应用程序使用GAC或regfree清单,因为注册是机器范围的,所以COM有一个相当严重的DLL地狱问题。这也解决了这个问题。通过将DLL复制到与客户端EXE相同的目录中来测试代码。考虑ILReMy生成一个可执行文件。我尝试在GAC中注册ToBuff.NET.DLL,但我仍然得到相同的错误。我还尝试查看.NET reflector中的依赖项,但protobuf-NET.dll中唯一的引用是mscorlib、System和System.Xml。所以正如马克所说,不应该缺少任何东西;COM依赖性是一种巨大的痛苦;作为一个懒惰可怕的黑客,只是为了看看它是否有效:如果你在GAC中安装它(protobuf-net),它是否有效?嘿,马克。谢谢你的快速回复。抱歉,我对这一点很陌生-你能解释一下我如何在GAC中安装protobuf net吗?感谢您对于[ComVisible]程序集,CLR搜索依赖程序集的方式不会改变。它首先在GAC中查找,然后在EXE的目录中查找。并且不在存储DLL的目录中。强烈建议为客户端应用程序使用GAC或regfree清单,因为注册是机器范围的,所以COM有一个相当严重的DLL地狱问题。这也解决了这个问题。通过将DLL复制到与客户端EXE相同的目录中来测试代码。考虑ILReMy生成一个可执行文件。我尝试在GAC中注册ToBuff.NET.DLL,但我仍然得到相同的错误。我还尝试查看.NET reflector中的依赖项,但protobuf-NET.dll中唯一的引用是mscorlib、System和System.Xml。所以正如马克所说,不应该缺少任何东西;假设我们讨论的是完整的框架(因为:COM互操作)——所有内容都应该在GAC中。引用nuget的话:protobuf-net没有任何非标准依赖项;假设我们讨论的是完整的框架(因为:COM互操作)——所有内容都应该在GAC中。引用nuget的话:很高兴听到!在.NETLand中,您可以使用程序集绑定重定向来破解这个问题;我不确定这在COM互操作方面是如何工作的,尽管听到这个消息很高兴!在.NETLand中,您可以使用程序集绑定重定向来破解这个问题;不过,不确定这在COM互操作方面会如何工作