【问题标题】:C# Visual Studio 2019, Meta Numeric, Error: Could not load file or assemblyC# Visual Studio 2019,元数字,错误:无法加载文件或程序集
【发布时间】:2021-03-23 16:44:17
【问题描述】:

Visual Studio 2019 C#

项目 1: 依赖项:Meta.Numerics 4.1.4。我通过 Manage NuGet Packages for Solution 添加了 Meta Numerics 项目 1 是一个类库 将被编译并且 .dll 将与将在主应用程序中使用它的同事共享 项目 1 使用 Debug 构建得很好。

using System;
using Meta.Numerics;

namespace LeakDetection
{
    public class LeakDetectionOperations
    {

        public LeakDetectionOperations(int co = 24)
        { }

        public int leakCheck()
        {

            double result = ComplexMath.Abs(10);
            return 0;
        }
    }
}

项目 2 依赖项:项目 1。通过添加引用、浏览器导入,并从项目 1 中选择 .dll 项目 2 只是一个简单的测试项目,我用来测试 .dll 对象。 它运行,但在尝试调用 Meta.Numerics 的 ABS 函数时抛出异常。

using System;
using LeakDetection;

namespace LeakTest
{
    class Program
    {
        static void Main(string[] args)
        {
            LeakDetectionOperations obj = new LeakDetectionOperations();
            int ret;
            ret = obj.leakCheck();

            Console.WriteLine("Hello World!");
        }
    }
}

我已按照 Meta.Numeric gitrepo 关于安装的说明进行操作。按照他们建议安装软件包的方式完成了安装。我还清理了构建,并重新构建。我还从调试更改为发布,以查看是否有任何与导致错误的调试相关的内容。正如您在上面的代码中看到的那样,它相当小,因为这不是我的实际代码。它有点复杂,但不是发布完整的代码,而是复制我遇到的问题的最小可用代码。 Meta.numeric 库中的任何内容均不可用。

我通常使用 Python 工作,对 C 和 C++ 有一定的经验,但我使用 make 文件在 linux 中编译。使用 C#,visual studio 对我来说很新鲜。

任何关于我应该去哪里的建议将不胜感激。

更新: 根据@kit 的建议,我在下面包含了项目 1 的 .csproj 文件

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>Leak_Detection</RootNamespace>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Meta.Numerics" Version="4.1.4" />
  </ItemGroup>

</Project>

.csproj 用于项目 2

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <Reference Include="Leak Detection">
      <HintPath>..\..\Leak Detection\Leak Detection\bin\Debug\netcoreapp3.1\Leak Detection.dll</HintPath>
    </Reference>
  </ItemGroup>

</Project>

【问题讨论】:

  • 您可以尝试将.csproj 文件的相关部分添加到您的问题中...
  • @Kit 感谢您的建议。我已经用完整的 .csproj 文件更新了帖子。它足够小,不会在帖子中添加很多行,而且我不知道什么是相关的。
  • 我能够毫无问题地创建和运行您的最小代码。它看起来像某种类型的 NuGet 版本控制冲突(2.2.0 尝试加载,如控制台所示与引用 Numerics 的 4.1.4。尝试清除 nuget 缓存、.vs 目录、删除 bin 和 obj 目录并进行完全重建在 VS 中看看是否可以解决问题。
  • 您使用的是 Nuget 包管理器中的 Meta.Numerics 还是 Meta.Numerics_2.2.0.0?
  • 前者。我最终得到了与您的代码几乎相同的代码(csproj、cs 等)。我在查看 NuGet.org 时注意到有一个 Meta.Numerics 具有 2.2 和 4.1.4 版本,然后是 Meta.Numerics_2.2.0.0使用 1.0.0 版本...绝对令人困惑...这就是为什么我认为缓存出现问题等等。

标签: c# exception visual-studio-2019


【解决方案1】:

我能够复制您的问题(不完全是,但我遇到了同样的错误)。我相信您的测试项目是在 .NET 框架中。如果我没有在测试项目中引用任何 nuget 包,则会发生故障。但是,如果我安装任何 nuget 包,然后再卸载它,程序就会成功运行。为了测试,我安装和卸载了 Newtonsoft.Json 包。因此,在 .NET 框架的 nuget 包引擎的初始化中存在一个错误,在没有任何 nuget 包的情况下,它无法解决传递的 nuget 依赖项。如果我在 .NET 核心中创建测试项目,测试项目运行没有任何问题。

我也把代码放到了github https://github.com/dheerajjain11/MissingDLLIssue/

  1. MetaNumerics 是 .NET 标准库
  2. MetaNumericsTest 是我安装和卸载 nuget 包的 .NET Framework 测试项目。现在,它运行成功了
  3. MetaNumerics2 是失败的 .NET Framework 测试项目
  4. MetaCore 是 dotnet 核心项目,运行时没有任何问题,也没有解决方法

【讨论】:

  • 我不完全确定你在说什么。我可以说 .dll 项目在我创建项目时被设置为类库(.NET 标准)。我在单独的窗口中创建的文本应用程序作为控制台应用程序 (.NET Core)。我知道(.NET Framework)有一个选项,但我没有选择那个选项。我现在已经设置了两次应用程序,结果相同。
  • 所以我乞求认为这是我的 VS 的问题。当我刚刚尝试了另一个具有我正在寻找的类似功能的包时,我遇到了同样的问题。 MathNet.Numeric 产生了同样的问题。
【解决方案2】:

我不知道这是否正常,但对我来说解决问题的是通过库和控制台应用程序上的 Nuget 包管理器安装包。两种构建都需要引用。

我之前所做的只是为库构建安装包。看到控制台应用程序是如何使用被引用和调用的 .dll 进行编译的,调用应用程序也需要安装包。

【讨论】:

  • 我刚刚注意到你没有显示项目 2 的 .csproj,你说它有问题。您在回答中所描述的似乎表明某种传递包问题。您在这里的解决方案基本上可以解决这个问题。也许在您的问题中添加第二个项目信息,然后我们可以为您提供规范的答案。您所做的仍然处于“正常”范围内,但通常没有必要。
  • 嘿@Kit,我已经用 MUC 更新了项目 1 和 2 的原始帖子,另外我在最后添加了 .csproj ,预解决。解决方法是做它应该做的事情,但我担心的是,当我将 .dll 发送给我们的客户时,它是否会很容易导入,或者他们是否必须进行与我相同的修复
  • 查看我对您问题的评论。我想我看到了一个可能的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-01
  • 1970-01-01
  • 2017-02-11
  • 1970-01-01
  • 1970-01-01
  • 2019-05-10
相关资源
最近更新 更多