"无法加载文件或程序集" net462 app引用netstandard1.5库时出错。但为什么?

时间:2016-11-29 01:05:42

标签: c# .net .net-core .net-standard .net-4.6.2

我想弄清楚在这个示例项目中我可能做错了什么。我的net462应用程序引用netstandard1.5库时出错。该应用程序依赖于"System.Collections.Immutable": "1.3.0",它根据Nuget针对NetStandard 1.0。该库取决于"NETStandard.Library": "1.6.0"

我是否设置了这些项目中的任何一个错误?我非常感谢对此有任何见解...

这是他们的project.json:

应用程式:

{
  "buildOptions": {
    "emitEntryPoint": true
  },
  "dependencies": {
    "SomeLibrary": "1.0.0-*"
  },
  "frameworks": {
    "net462": {
      "dependencies": {
        "System.Collections.Immutable": "1.3.0" 
      }
    }
  },
  "version": "1.0.0-*"
}

{
  "buildOptions": {
    "allowUnsafe": true
  },
  "dependencies": {
  },
  "frameworks": {
    "netstandard1.5": {
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "version": "1.0.0-*"
}

所有库都有这个界面:

using System.Collections.Generic;

namespace SomeLibrary
{
    public interface SomeInterface
    {
        int GetValue(KeyValuePair<string, int> somePair);
    }
}

该应用程序实现此接口并调用具体类:

public class Program
{
    public static void Main(string[] args)
    {
        var concreteObject = new ConcreteImplementation();
        var answer = concreteObject.GetValue(new KeyValuePair<string, int>("key", 33));
        Console.WriteLine(answer);
    }
}


class ConcreteImplementation : SomeInterface
{
    public int GetValue(KeyValuePair<string, int> somePair)
    {
        return somePair.Value;
    }
}

如果我尝试运行该应用,则会出现以下错误:

{"Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.":"System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"}

堆叠:at ErrorExample.Consumer..ctor() at ErrorExample.Program.Main(String[] args) in ..\ErrorExample\src\ErrorExample\Program.cs:line 11

我在这里缺少什么? 谢谢!

1 个答案:

答案 0 :(得分:1)

我不太确定为什么会发生这种情况,但使用 netstandard1.4 作为您的图书馆项目的TFM可以解决您的问题。换句话说,您图书馆的project.json应该是这样的:

{
  "buildOptions": {
    "allowUnsafe": true
  },
  "dependencies": {
  },
  "frameworks": {
    "netstandard1.4": { // <-- replace "netstandard1.5" with "netstandard1.4" or lower
      "dependencies": {
        "NETStandard.Library": "1.6.0"
      }
    }
  },
  "version": "1.0.0-*"
}

作为当前的一般经验法则:避免使用netstandard1.5netstandard1.6:使用 netstandard1.4 并根据您的要求降低,直到明确强制为止至。等待释放netstandard2.0。您可以在MSDN blog artible about .NET Standard中阅读有关它的详细信息。这是FAQ