Я пытаюсь использовать Mono.Options
под номером .NET Core, ¹ используя его инструменты командной строки.Building Mono.Options в .NET Core CLI (dotnet build)
Первоначально я попытался загрузить его from NuGet используя декларацию зависимости в моем project.json
файле, но dotnet restore
жалуется, что пакет не совместим с dnxcore50
framework.²
поэтому я решил попробовать строить его из источника. Я заметил в исходном коде Mono.Options
, что у него есть опция построения PCL
. Решив, что, возможно, PCL был близко достаточно приближения к .NET Ядру, я попытался создать проект DLL, чтобы построить его с этой установкой Enabled:
{
"version": "0.0.0-d95ccb2ca5",
"compilationOptions": {
"emitEntryPoint": false,
"define": [ "PCL" ],
},
"dependencies": {
"NETStandard.Library": "1.0.0-rc2-23811"
},
"compile": [ "*.cs" ],
"frameworks": {
"dnxcore50": { }
}
}
Я тогда помещенной копией Options.cs
скачанной по ссылке выше в тот же каталог, и сказал dotnet build
, который дает эти ошибки:
.../Mono/Options.cs(137,22): error CS0234: The
type or namespace name 'Serialization' does not exist in the namespace
'System.Runtime' (are you missing an assembly reference?)
.../Mono/Options.cs(729,27): error CS0246: The
type or namespace name 'KeyedCollection<,>' could not be found (are you
missing a using directive or an assembly reference?)
... плюс некоторые другие все вытекающие из этих двух ключевых ошибок.
Это, наконец, приносит мне на мои вопросы:
Почему
System.Runtime.Serialization
не хватает? Согласно the docs, он должен быть частью .NET Core.позже я добавил явные зависимости для исходных пакетов два пространств имен компилятора жалующихся:
... "frameworks": { "dotnet5.4": { "dependencies": { "System.ObjectModel": "4.0.*", "System.Runtime": "4.1.0-rc2-23811" } } }
dotnet restore
затем успешно, и большинство ошибок сборки уходит, но первая ошибка оSerialization
продолжает происходить. Является ли .NET Core просто неполным в это время?Есть ли обходной путь, кроме как только ожидание переноса этого класса?
Я использовал
dnxcore50
в исходном файле проекта, потому что именно так он создалdotnet new
. Переход кdotnet5.4
, как представляется, необходимо в соответствии с the ASP.NET 5 package search engine, но в том, что изменение кошерный с .NET Ядра? ³
Asides
Почему? Потому что это 2016 и .NET все еще не имеет встроенной функции синтаксического анализа командной строки. Grrrr. Возможно, приобретение Microsoft Xamarin приведет к тому, что
Mono.Options
будет включен в .NET Core. Между тем ...Mono.Options
4.2.2.1 - выпущено после того, как задан вопрос - решает эту проблему совместимости.Результаты поиска в пакете ASP.NET 5 подразумевают, что
netcore50
также должен работать для моих целей, но затем я получаю жалобы по поводуno run-time assembly compatible with osx.10.10-x64
.Это происходит на машине OS X 10.10 с установленным Mono 4.2.1.
Mono.Options
делает строить под этим, очевидно. Этот вопрос возник из-за того, что я пытаюсь переключить некоторые из моих более простых существующих проектов на это новое, более легкое время выполнения.
Microsoft теперь предоставляет https://www.nuget.org/packages/Microsoft.Extensions.CommandLineUtils/. Полезный документ находится здесь https://msdn.microsoft.com/en-us/magazine/mt763239.aspx – Smartkid
@Smartkid: Спасибо! Только 11 лет поздно, но, наконец, здесь. :) –