Ошибка "Не удалось загрузить файл или сборку", когда приложение 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.