#c# #nuget #.net-core
#c# #nuget #.net-ядро
Вопрос:
У меня есть проект .NET Core со следующим project.json
:
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
},
"scripts": {
"postcompile": [
"dotnet pack --no-build --configuration %compile:Configuration%"
]
}
}
Я создал пакет nuget (см. postcompile
Выше) и опубликовал в nuget.
Затем я создал стандартную библиотеку 4.6.2, но не могу установить пакет — возникает ошибка, что пакет не содержит допустимых сборок для целевой платформы .NET Framework 4.6.2.
Как я должен подготовить пакет nuget, чтобы сделать его доступным в стандартной библиотеке? Я думаю, что целевой NETStandard действителен как для основных, так и для стандартных проектов.
Комментарии:
1. нет. вы должны добавить поддержку target-framework в свой пакет nuget. добавьте net462 в свой project.json
2. Возможно ли это с помощью postcompile? В документах docs.microsoft.com/en-us/dotnet/articles/core/tools/dotnet-pack такого варианта нет.
3. добавьте targetframework net462 в project.json . с помощью postcompile это невозможно. ваш пакет получит поддержку после добавления целевого фреймворка. (существуют различия в коде / библиотеке между net462 и netstandard1.6)
4. смотрите Мой ответ в качестве примера
Ответ №1:
Если вы проверите матрицу совместимости для .Net Standard, похоже, что .Net 4.6.2 поддерживает только NetStandard 1.5. В разделе framework вы ориентируетесь на 1.6, который отмечен для vNext.
Смотрите Здесь Матрицу совместимости, чтобы узнать, на какую версию вы должны ориентироваться
Итак, другими словами, если вы измените свою конфигурацию на следующую, вы сможете свободно ссылаться на библиотеку:
"frameworks":
{
"netstandard1.5": {}
}
Вам не нужно добавлять другой тип фреймворка, как предложено в другом ответе, поскольку 4.6.2 должен иметь возможность ссылаться на стандарт 1.5.
Комментарии:
1. Другая большая ошибка, связанная с этим, если вы упаковываете свои собственные пакеты nuget, будьте осторожны с «глобальным» кешем nuget в вашей папке users, если вы случайно получите устаревшие пакеты, которые настроены неправильно, это может заставить вас некоторое время ломать голову только с тупыми ошибками от VS…
Ответ №2:
вы должны иметь возможность добавить поддержку .Net Framework 4.6.2, добавив «net462» в ваш project.json:
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
},
"net462": {
"dependencies" : {
"System.Runtime": "4.0.20.0" // you may have to add this
// add here your dependencies
}
}
},
"scripts": {
"postcompile": [
"dotnet pack --no-build --configuration %compile:Configuration%"
]
}
}
смотрите также мой project.json на github с несколькими поддерживаемыми фреймворками