【问题标题】:Referenced Nuget DLL Not Found Working Visual Studio未找到引用的 Nuget DLL 工作 Visual Studio
【发布时间】:2018-03-03 11:38:26
【问题描述】:

我添加了一个名为 Mpir.Net 的 Nuget 库,它专门处理巨大的数字,比内置的 BigInteger 类要快得多。当我添加它时,Visual Studio 2017 能够找到 DLL,将其添加到我的引用中,并根据 DLL 中定义的变量和函数提供建议。与有类似问题的人在这里提出的许多问题不同,Visual Studio 显然能够找到 DLL。

问题是,当我运行程序时,它说找不到 xmpir64.dll,即使 Visual Studio 可以在代码编辑器中引用其中的内容。

我尝试更改目标 .NET 版本无济于事。问题是什么? 作为旁注,我对 C# 和 Visual Studio 很陌生,所以在回答时请记住这一点。 Here 是我的解决方案资源管理器图片的链接。

【问题讨论】:

  • 能否也包括项目中包含的 Mpir.Net.dll 文件的属性视图?
  • @CodexNZ 我搞定了。谢谢!

标签: c# visual-studio dll nuget visual-studio-2017


【解决方案1】:

Mpir.Net 是一个非托管库 (GMP) 的包装器。当它说它无法找到 DLL 时,这是因为它正在寻找项目文件夹中的非托管的 (xmpir64.dll)(而不是引用中的托管的,它是包装器)。

您可能只需要单击 xmpir64.dll(以及 x32 的),查看其右下角的属性,并确保将复制到输出目录设置为“始终复制”。

附带说明,Mpir.NET 不会正确处理其非托管资源,因此如果您有大量内存泄漏,请不要感到惊讶。我不认为我会将它用于商业代码。

【讨论】:

  • 为了找到一个支持小数的快速 BigInteger 库,我已经经历了 50 圈。您知道没有任何主要缺点的 C# 吗?我不知道 Mpir 有内存泄漏问题。我没有将它用于商业应用程序,但我将它用于内存很重的东西。我应该只使用内置的 BigInteger 吗?
  • 成功了!为什么我必须将其设置为始终复制?
  • 这就是我们最终所做的,但我们正在处理小于 256 位的整数。我们还需要创建和销毁其中很多,很快就发现了内存泄漏。
  • 也可以是“如果较新则复制”,在这种情况下无关紧要。
  • 我想您可能想知道我找到了一种在 C# 中使用 MPIR 和 MPFR 的方法,而不会发生内存泄漏(据我所知)。基本上,我使用 Youtube 教程从头开始为 VS2017 构建 MPFR 和 MPIR。然后我使用 MPFRC++ 在 C++ 中调用该代码。然后我在 C++ 中进行了所有计算,并使用 C++/CLI 将其传递给 C#。它非常复杂且难以设置,但它仍然比我发现的任何 C# 本机实现都要快。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多