我们正在创建一个用 C++ 编写的 dll,提供对某些硬件的访问。我们还有一个使用此 dll 的 C# 程序。
我们遇到了版本问题。实际上,在运行 C# 程序时,它绝对希望使用它在编译时使用的确切 C++ dll 版本。 IE。如果 C# 程序是使用 C++ dll 1.2.3.4 编译的,则程序将拒绝使用 C++ dll 1.2.3.5 运行。
我想指示 C# 程序使用版本为 1.2.anything 的任何 C++ dll。
我可以在 C# 项目中的什么地方配置它?
此问题已被 that one 取代, 更多与 COM 相关。
最佳答案
C++ 中不存在这种花哨的东西。使用并排 list 在技术上允许这样做,但您应该知道这一点,因为您会在 C# 程序的 list 中键入版本号。
更可能的解释是您实际上创建了一个 C++/CLI 程序集。许多程序员将 C++/CLI 与 C++ 混淆。容易犯错,因为该语言允许使用 native C++ 代码。但它实际上被编译成一个混合模式程序集,一个包含 IL 和 native 代码的程序集。当 CLR 加载此类程序集时,会对其进行正常的 CLR 版本检查,它只对完全匹配的版本感到满意。强大的 DLL hell 反制措施。
并且可以使用正常的 CLR 版本争论选项来绕过此检查,<bindingRedirect>
app.exe.config 文件中的元素。以及控制程序集版本号的方式与您为 C# 代码执行的方式一样,因此这不是必需的。
检查此猜测是否准确的最简单方法是使用“项目”+“添加引用”并选择 DLL。如果这没有引起任何提示并且该程序集被添加到您的 C# 项目的引用节点,那么您知道它是一个普通的 .NET 程序集。不要忘记利用这一点,不需要 pinvoke。
关于c# - C# 程序如何使用任何版本的 C++ dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17588029/