Ошибка "Не удалось загрузить файл или сборку", когда приложение net462 ссылается на библиотеку netstandard1.5. Но почему?

Я пытаюсь понять, что я могу делать неправильно в этом примере проекта. Я получаю ошибку, когда мой net462 приложение ссылается на netstandard1.5 библиотека. Приложение имеет зависимость от "System.Collections.Immutable": "1.3.0", который нацелен на NetStandard 1.0 в соответствии с Nuget. Библиотека зависит от "NETStandard.Library": "1.6.0",

Я неправильно настраиваю любой из этих проектов? Я был бы очень признателен за понимание этого...

Вот их проект. 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 ответ

Решение

Я не совсем уверен, почему это происходит, но используя 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.5 а также netstandard1.6: использовать netstandard1.4 и ниже в соответствии с вашими требованиями, пока вы не будете явно вынуждены. Ждите выпуска netstandard2.0, Вы можете прочитать подробности в блоге MSDN о.NET Standard. А вот и FAQ.

Другие вопросы по тегам