Як я можу діагностувати пропущені залежності (або інші збої завантажувача) у dnx?


133

Я намагаюся запустити модифіковану версію зразка HelloWeb для ASP.NET vNext на DNX за допомогою Kestrel. Я розумію, що це дуже сильно на межі кровотечі, але я би сподівався, що команда ASP.NET хоча б збереже найпростіший можливий веб-додаток :)

Середовище:

  • Linux (Ubuntu, досить багато)
  • Моно 3.12.1
  • DNX 1.0.0-beta4-11257 (у мене теж 11249)

Код "Веб-додаток" у Startup.cs:

using Microsoft.AspNet.Builder;
public class Startup
{
    public void Configure(IApplicationBuilder app)
    {
        app.UseWelcomePage();
    }
}

Конфігурація проекту в project.json:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4",
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta4",
    "Microsoft.Framework.Runtime": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Common": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Loader": "1.0.0-beta4",
    "Microsoft.Framework.Runtime.Interfaces": "1.0.0-beta4",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

kpm restore здається, працює добре.

Коли я намагаюся запустити, я отримую виняток, який підказує, що Microsoft.Framework.Runtime.IApplicationEnvironmentйого неможливо знайти. Командний рядок та помилка (дещо переформатована)

.../HelloWeb$ dnx . kestrel
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
or one of its dependencies.
File name: 'Microsoft.Framework.Runtime.IApplicationEnvironment,
  Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
  at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke 
    (System.Reflection.MonoMethod,object,object[],System.Exception&)
  at System.Reflection.MonoMethod.Invoke 
    (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder,
     System.Object[] parameters, System.Globalization.CultureInfo culture)
    [0x00000] in <filename unknown>:0

Хоча, очевидно, моя найгостріша потреба полягає в тому, щоб виправити це, я також вдячний поради щодо того, як рухатись, щоб діагностувати, що відбувається не так, щоб я міг вирішити подібні проблеми самостійно в майбутньому. (Це також може зробити це питання кориснішим і для інших.)

Я знайшов Microsoft.Framework.Runtime.IApplicationEnvironmentу Microsoft.Framework.Runtime.Interfacesджерелі збірки , і це, схоже, нещодавно не змінилося. Незрозуміло, чому виняток показує назву так, ніби це ціла збірка сама по собі, а не просто інтерфейс в іншій збірці. Я здогадуюсь, що це може бути пов'язано з нейтральними інтерфейсними складаннями , але це не зрозуміло з помилки. ( [AssemblyNeutral]мертвий, значить, це не все ... )


з цікавості, ти мав на увазі посилання на github.com/aspnet/Home/wiki/Assembly-Neutral-інтерфейси для посилань на нейтральну інтерфейс для вашої збірки чи десь ще? Як це зараз зламано
cgijbels

@cgijbels: Спасибі - я насправді мав на увазі посилання на davidfowl.com/assembly-neutral-interfaces, але ваше посилання, можливо, краще ...
Джон Скіт,

@JonSkeet нейтральних інтерфейсів вже немає.
тугберк

@tugberk: Боже, справді? Це цікаво - чи є у вас посилання, яке я міг би включити до редагування?
Джон Скіт

@JonSkeet github.com/aspnet/Configuration/commit/… можливо? :)
tugberk

Відповіді:


144

Гарне питання. Що стосується вашої конкретної проблеми, то, схоже, у вас невідповідність вирішеним залежностям. Коли такі випадки трапляються, швидше за все, ви працюєте з додатком на несумісному dnx. Ми все ще робимо дуже великі переломні зміни, тому, якщо ви коли-небудь побачите, що метод відсутній, відсутній тип, швидше за все, у вас запущені betaXпакети та betaYdnx або навпаки.

Навіть конкретніше, нейтральні інтерфейси збірки були вилучені в бета-версії 4, але схоже, що програма, яку ви запускаєте, все ще використовує.

Ми плануємо зробити так, щоб пакети могли позначати мінімальний dnx, який потрібно запустити, щоб зробити повідомлення про помилку більш зрозумілим. Крім того, як проходить час, руйнуючі зміни будуть стихати.

Взагалі, мені здається, що саме час я написав керівництво про те, як діагностувати подібні проблеми при використанні dnx (оскільки він зовсім інший від існуючого .NET).

Залежності, які ви вкладаєте, лише на project.jsonверхньому рівні. Версії також завжди є мінімумами (це просто як пакет NuGet). Це означає, що коли ви вказуєте, Foo 1.0.0-beta4ви дійсно вказуєте Foo >= 1.0.0-beta4. Це означає, що якщо ви попросите MVC 0.0.1і мінімальна версія вашого налаштованого каналу MVC 3.0.0, ви отримаєте цю. Ми також НІКОЛИ не плаваємо вашу версію, якщо не вказати її. Якщо ви попросите 1.0.0 і він існує, ви отримаєте 1.0.0, навіть якщо існують новіші версії. Вказані порожні версії ВЖЕ погано, і в наступних версіях їх буде заборонено.

Існує нова функція, яку ми вводимо в цілісні плаваючі версії. Сьогодні він працює лише над тегом попереднього випуску, але в наступній версії він буде працювати над більшою частиною версії. Це схоже на синтаксис npm та gem для визначення діапазонів версій у файлі специфікації пакета.

1.0.0-*- Значить, дайте мені ВИСОКУ версію, що відповідає префіксу (відповідно до правил семантичної версії ) АБО якщо немає версії, яка відповідає цьому префіксу, використовуйте нормальну поведінку та отримайте мене НАЙНІШКУЮ версію> = вказана версія.

Коли ви запустите відновлення в останніх збірках, він випише файл з назвою project.lock.json. Цей файл матиме транзитивне закриття залежностей для всіх цільових рамок, визначених у project.json.

Якщо щось подібне не вдається, ви можете зробити наступне:

Погляньте на вирішені залежності, використовуючи kpm list. Це покаже вам розв’язані версії пакетів, на які посилається ваш проект, і яку залежність викликав його. Наприклад, якщо A -> B, він покаже:

А
  -> В
Б
 ->

Фактичний вихід списку KPM:

Залежності до лістингу для ClassLibrary39 (C: \ Users \ davifowl \ Documents \ Visual Studio 14 \ Projects \ ClassLibrary39 \ src \ ClassLibrary39 \ project.json)

[Target framework DNX,Version=v4.5.1 (dnx451)]

 framework/Microsoft.CSharp 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/mscorlib 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System 4.0.0.0
    -> ClassLibrary39 1.0.0
 framework/System.Core 4.0.0.0
    -> ClassLibrary39 1.0.0
*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0

[Target framework DNXCore,Version=v5.0 (dnxcore50)]

*Newtonsoft.Json 6.0.1
    -> ClassLibrary39 1.0.0
 System.Runtime 4.0.20-beta-22709
    -> ClassLibrary39 1.0.0

* означає пряму залежність.

Якщо у вас є робоча візуальна студія (яка зараз розривається з DNX), ви можете подивитися вузол посилань. Він має ті самі дані, які представлені візуально:

Вузол посилання

Давайте розглянемо, як виглядає поломка залежності:

Ось project.json

{
    "version": "1.0.0-*",
    "dependencies": {
        "Newtonsoft.Json": "8.0.0"
    },

    "frameworks" : {
        "dnx451" : { 
            "dependencies": {
            }
        },
        "dnxcore50" : { 
            "dependencies": {
                "System.Runtime": "4.0.20-beta-22709"
            }
        }
    }
}

Newtonsoft.Json 8.0.0не існує. Отже, запущене відновлення kpm показує наступне:

введіть тут опис зображення

Діагностуючи, коли відновлення могло не вдатися, подивіться зроблені запити HTTP, вони повідомляють вам про те, в які погляди налаштовані джерела пакета kpm. Зауважте, що на зображенні, наведеному вище, є CACHEзапит. Це вбудоване кешування на основі типу ресурсу (nupkg або nuspec) і має настроюваний TTL (дивіться kpm restore --help). Якщо ви хочете змусити kpmнатиснути на віддалені джерела NuGet, використовуйте --no-cacheпрапор:

Відновлення KPM --no-кеш

Ці помилки також з’являються у Visual Studio у вікні виводу журналу менеджера пакунків:

введіть тут опис зображення

Бічна примітка!

Джерела пакета

Я опишу те, як працює NuGet.config зараз (що, можливо, зміниться в майбутньому). За замовчуванням у вас є NuGet.config із джерелом NuGet.org, налаштованим у всьому світі%appdata%\NuGet\NuGet.Config . Ви можете керувати цими глобальними джерелами у візуальній студії або за допомогою інструменту командного рядка NuGet. Ви завжди повинні дивитись на ефективні джерела (ті, які перераховані у вихідних даних у хвилину), намагаючись діагностувати збої.

Детальніше про NuGet.config тут

Повернення до реальності:

Коли залежності не вирішені, запуск програми надасть вам це:

> dnx . run
System.InvalidOperationException: Failed to resolve the following dependencies for target framework 'DNX,Version=v4.5.1':
   Newtonsoft.Json 8.0.0

Searched Locations:
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\{name}\project.json
  C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\test\{name}\project.json
  C:\Users\davifowl\.dnx\packages\{name}\{version}\{name}.nuspec
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\{name}.dll
  C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Facades\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_32\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_64\{name}\{version}\{name}.dll
  C:\WINDOWS\Microsoft.NET\assembly\GAC_MSIL\{name}\{version}\{name}.dll

Try running 'kpm restore'.

   at Microsoft.Framework.Runtime.DefaultHost.GetEntryPoint(String applicationName)
   at Microsoft.Framework.ApplicationHost.Program.ExecuteMain(DefaultHost host, String applicationName, String[] args)
   at Microsoft.Framework.ApplicationHost.Program.Main(String[] args)

В основному час виконання намагається перевірити, що весь графік залежності вирішується перед спробою запуску. Якщо він пропонує запустити, kpm restoreце тому, що він не може знайти перелічені залежності.

Ще одна причина, чому ви можете отримати цю помилку, - це якщо ви використовуєте неправильний аромат dnx. Якщо у вашій програмі вказано лише dnx451, а ви намагаєтеся запустити dnx CoreCLR, може виникнути подібна проблема. Зверніть пильну увагу на цільову рамку у повідомленні про помилку:

Для бігу:

dnx4x - runs on dnx-clr-{etc}
dnxcore50 - runs on dnx-coreclr-{etc}

Коли ви намагаєтеся запустити, вам слід пам’ятати про те, що психічне відображення від CLR до цільової рамки, визначеної у вашому project.json.

Це також відображається у Visual Studio під вузлом посилань: Невирішені залежності

Вузли, позначені жовтим кольором, не вирішені.

Вони також відображаються у списку помилок:

Список помилок невирішеними залежностями

Будівництво

Ці помилки також з’являються під час побудови. При побудові з командного рядка висновок є дуже багатослівним і може бути надзвичайно корисним при діагностиці проблем:

> kpm build

Building ClassLibrary39 for DNX,Version=v4.5.1
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Assembly dependency framework/mscorlib 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\mscorlib.dll

  Using Assembly dependency framework/System 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.dll

  Using Assembly dependency framework/System.Core 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\System.Core.dll

  Using Assembly dependency framework/Microsoft.CSharp 4.0.0.0
    Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\Microsoft.CSharp.dll


Building ClassLibrary39 for DNXCore,Version=v5.0
  Using Project dependency ClassLibrary39 1.0.0
    Source: C:\Users\davifowl\Documents\Visual Studio 14\Projects\ClassLibrary39\src\ClassLibrary39\project.json

  Using Package dependency System.Console 4.0.0-beta-22709
    Source: C:\Users\davifowl\.dnx\packages\System.Console\4.0.0-beta-22709
    File: lib\contract\System.Console.dll

  Using Package dependency System.IO 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.IO\4.0.10-beta-22231
    File: lib\contract\System.IO.dll

  Using Package dependency System.Runtime 4.0.20-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Runtime\4.0.20-beta-22231
    File: lib\contract\System.Runtime.dll

  Using Package dependency System.Text.Encoding 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Text.Encoding\4.0.10-beta-22231
    File: lib\contract\System.Text.Encoding.dll

  Using Package dependency System.Threading.Tasks 4.0.10-beta-22231
    Source: C:\Users\davifowl\.dnx\packages\System.Threading.Tasks\4.0.10-beta-22231
    File: lib\contract\System.Threading.Tasks.dll

Вихідні дані показують всі складання, передані в компілятор з пакетів та посилань на проекти. Коли ви починаєте отримувати збої в збірці, корисно заглянути сюди, щоб переконатися, що пакет, який ви використовуєте, справді працює на цій цільовій платформі.

Ось приклад пакету, який не працює на dnxcore50:

{
    "version": "1.0.0-*",
    "dependencies": {
        "Microsoft.Owin.Host.SystemWeb": "3.0.0"
    },

    "frameworks": {
        "dnx451": {
            "dependencies": {
            }
        },
        "dnxcore50": {
            "dependencies": {
                "System.Console": "4.0.0-beta-22709"
            }
        }
    }
}

Microsoft.Owin.Host.SystemWeb версії 3.0.0 не має жодних збірок, які працюють на dnxcore50 (подивіться папку lib для розпакованого пакета). Коли ми запускаємо kpm build:

Відсутні збірки на dnxcore50

Зауважте, що написано "використання пакета Microsoft.Owin.Host.SystemWeb", але немає "Файл:". Це може бути причиною невдачі в побудові.

Тут закінчується мозок мозку


Я намагаюся використовувати список dnu, як ви пропонуєте, щоб визначити, чому dnx не може вирішити залежність. Але я отримую червоне "Неможливо знайти project.json". Збірка перебуває у папці артефактів, що генерується за допомогою позначки "Отримати результати у збірці". Будь-які пропозиції щодо того, як діяти?
Майк Скотт

Що стосується папки артефактів з чим-небудь? Ви посилалися на залежність у project.json? Чи доступний той пакет, на який ви посилаєтесь, у налаштованому каналі?
davidfowl

17

Я досі не знаю повністю, що було не так, але тепер у мене є ряд кроків, щоб принаймні полегшити спробу:

  • Коли ви сумніваєтесь, перевстановіть dnx
    • Видування кеш-пакету може бути корисним
  • Переконайтеся, ~/.config/NuGet.configщо ви використовуєте правильні канали NuGet

Я в кінцевому підсумку використовував наступний командний рядок для тестування різних варіантів досить чистого способу:

rm -rf ~/.dnx/packages && rm -rf ~/.dnx/runtimes && dnvm upgrade && kpm restore && dnx . kestrel

Схоже, моя проблема справді була пов’язана з неправильними версіями встановлених залежностей. Номер версії "1.0.0-beta4", мабуть, зовсім інший "1.0.0-beta4-*". Наприклад, Kestrelзалежність встановлена ​​версія 1.0.0-beta4-11185, коли тільки вказано як 1.0.0-beta4, але версія 1.0.0-beta4-11262 з -*кінцем. Я хотів beta4чітко вказати, щоб випадково не використовувати збірку бета3 разом із

Наступний конфігурація проекту працює чудово:

{
  "dependencies": {
    "Kestrel": "1.0.0-beta4-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-beta4-*",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta4-*",
  },
  "commands": {
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
  },
  "frameworks": {
    "dnx451": {}
  }
}

6
Це тому, що -*завжди ви отримуєте останню версію попереднього випуску, тоді як без неї ви отримуєте найнижчу версію, яка задовольняє всі залежності (як це буває в NuGet). Цей тест має кілька прикладів.
Олександр Кеплінгер

2
@ AlexanderKöplinger: Дякую, це має сенс. Отже ... beta4 - це найдавніший beta4, тоді як ... beta4- * - це останній beta4, правда?
Джон Скіт

4
"frameworks": {"dnx451": {}}якби це було зафіксовано для мене, не потрібноdnxcore50
vicentedealencar

Ваша перша команда також допомогла мені пройти через застрявання у версії beta5. Я спробував запустити dnvm upgrade-self, це не буде оновлено до останньої версії. Запуск командного рядка VS в якості адміністратора показав версію dnvm як rc1..., однак, коли це не адміністратор beta5.... Після вашої команди як адміністратор, так і не адміністратор, підказки відображаються як rc2...(остання) версія.
JabberwockyDecompiler

Для тих, хто використовує моно та цікавить, чи вибрати, dnx451чи dnxcore50ця відповідь допомогла мені зрозуміти цю тему трохи більше: stackoverflow.com/a/30846048/89590 Коротка відповідь: dnx451підходить для моно.
Нейт Кук

8

Ви можете встановити ENV вар з ім'ям , DNX_TRACEщоб 1побачити TON більш діагностичну інформацію. Будьте попереджені, це набагато більше інформації!


@JonSkeet BTW, інші відповіді (включаючи вашу самовідповідь) містять чудову інформацію про діагностику та усунення конкретної проблеми, з якою ви зіткнулися. Я відповів на цю відповідь надзвичайно коротко, тому що це просто інша відповідь, яка може призвести до більшої підказки щодо того, чому проблема сталася в першу чергу.
Ейлон

Абсолютно - я ціную це :)
Джон Скіт

3

Щоб змусити його працювати, я змінив своє project.json.. тепер це виглядає так:

{
"dependencies": {
    "Kestrel": "1.0.0-*",
    "Microsoft.AspNet.Diagnostics": "1.0.0-*",
    "Microsoft.AspNet.Hosting": "1.0.0-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-*"
},
"commands": {
    "web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://localhost:5001",
    "kestrel": "Microsoft.AspNet.Hosting --server Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    }
}

Ключ, здавалося, був розділ рамки.

Також перейменування змінилося як k webпрацює так, що його зараз dnx . webабоdnx . kestrel

Оновлення - трохи більше інформації

Як не дивно, після запуску без визначених фреймворків він пішов і отримав купу додаткових матеріалів, коли я це зробив kpm restore:

...
Installing Microsoft.Framework.Logging 1.0.0-beta4-11001
Installing Microsoft.Framework.Logging.Interfaces 1.0.0-beta4-11001
Installing Microsoft.Framework.DependencyInjection.Interfaces 1.0.0-beta4-11010
Installing Microsoft.Framework.DependencyInjection 1.0.0-beta4-11010
Installing Microsoft.Framework.ConfigurationModel 1.0.0-beta4-10976
Installing Microsoft.Framework.ConfigurationModel.Interfaces 1.0.0-beta4-10976
Installing Microsoft.AspNet.Hosting.Interfaces 1.0.0-beta4-11328
Installing Microsoft.AspNet.FeatureModel 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http 1.0.0-beta4-11104
Installing Microsoft.AspNet.FileProviders.Interfaces 1.0.0-beta4-11006
Installing Microsoft.Framework.Caching.Interfaces 1.0.0-beta4-10981
Installing Microsoft.AspNet.FileProviders 1.0.0-beta4-11006
Installing Microsoft.AspNet.Http.Core 1.0.0-beta4-11104
Installing Microsoft.AspNet.WebUtilities 1.0.0-beta4-11104
Installing Microsoft.Net.Http.Headers 1.0.0-beta4-11104
Installing Microsoft.AspNet.Http.Interfaces 1.0.0-beta4-11104
Installing Microsoft.Framework.Runtime.Interfaces 1.0.0-beta4-11257
Installing Microsoft.AspNet.Server.Kestrel 1.0.0-beta4-11262
Installing Microsoft.Net.Http.Server 1.0.0-beta4-11698
Installing Microsoft.Net.WebSockets 1.0.0-beta4-11698
Installing Microsoft.Net.WebSocketAbstractions 1.0.0-beta4-10915
Installing Microsoft.Framework.WebEncoders 1.0.0-beta4-11104
Installing Microsoft.Framework.OptionsModel 1.0.0-beta4-10984
Installing Microsoft.AspNet.Http.Extensions 1.0.0-beta4-11104
Installing Microsoft.AspNet.Diagnostics.Interfaces 1.0.0-beta4-12451
Installing Microsoft.AspNet.RequestContainer 1.0.0-beta4-11328

.. тоді воно добре побігло. Потім я переключився назад у розділ фрейму

"frameworks": {
    "dnx451": {}
}

.. і це все-таки спрацювало, тоді як раніше це призведе до помилки!

Дуже дивно!

(Я бігаю 1.0.0-beta4-11257)

Подальше оновлення

Я розкручується новий екземпляр Ubuntu, і отримав ту ж помилку , як ви .. Моя думка про те , що проблема може бути викликана вона тільки намагається отримати пакети від nuget.orgі не myget.org(який має нові речі) , так що я впав у NuGet.Configв корінь проекту ..

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" />
    <add key="NuGet" value="https://nuget.org/api/v2/" />
  </packageSources>
</configuration>

.. це, здається, виправило мене, отримавши правильні версії (після іншої kpm restore).


1
Повторіть частину "dnx. Kestrel" - справді, отже, і команду, яку я показав :) З цією конфігурацією я отримую іншу помилку: System.TypeLoadException: Не вдалося завантажити тип "Microsoft.Framework.DependencyInjection.LoggingServiceCollectionExtensions" від складання "Microsoft. Framework.Logging, версія = 1.0.0.0, культура = нейтральна, PublicKeyToken = null '. Яку версію DNX ви використовуєте?
Джон Скіт

1
Коли я зробив "dnx. Web" в перший раз, коли я потрапив: `System.InvalidOperationException: Не вдалося вирішити наступні залежності для цільової рамки 'DNX, Version = v4.5.1', ​​і він запропонував список речей, яких у неї не було.
Стівен Папа

Цікаво. На якій платформі це, btw?
Джон Скіт

Ви зробили 'source ~ / .bashrc' для перезавантаження змінних середовища після оновлення DNX? Також мені довелося зробити "dnvm upgrade" + "dnvm use default"
Стівен Папа

DNX не оновлювався .bashrc ... можливо тому, що я вчора створив його вручну. Спробуємо скористатись оновленими інструкціями замість цього…
Джон Скіт

2

Цими днями package.jsonзакінчуються всі мої версії"-rc2-*"

(Тільки виключення , які я бачив до сих пір є Microsoft.Framework.Configurationпакети, які повинні бути або "1.0.0-rc1-*"або "1.0.0-*")

Щодо "поїздів версій", про які згадує @davidfowl, здається, що багато болю зникло між beta8 та rc2.

dnvm upgrade -u -arch x64 -r coreclr

У мене було найбільше coreclrшансів на ці 2 канали NuGet:

"https://www.myget.org/F/aspnetvnext/"
"https://nuget.org/api/v2/"

Коли я зробити вже НЕ вистачає проблем пакет, 90% часу , це ті ж винуватці:

Newtonsoft.Json
Ix-Async
Remotion.Linq

Більшу частину часу я можу їх обійти, змусивши основний канал NuGet.org:

dnu restore;
dnu restore -s https://nuget.org/api/v2

Ось мій робочий config.json:

{
"dependencies": {
    "Microsoft.AspNet.Diagnostics": "1.0.0-rc2-*",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc2-*",
    "Microsoft.AspNet.Hosting": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http": "1.0.0-rc2-*",
    "Microsoft.AspNet.Http.Abstractions": "1.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Core": "6.0.0-rc2-*",
    "Microsoft.AspNet.Mvc.Razor": "6.0.0-rc2-*",
    "Microsoft.AspNet.Owin": "1.0.0-rc2-*",
    "Microsoft.AspNet.Routing": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc2-*",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-rc2-*",
    "Microsoft.AspNet.Session": "1.0.0-rc2-*",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc2-*",
    "EntityFramework.Commands": "7.0.0-rc2-*",
    "EntityFramework.Core": "7.0.0-rc2-*",
    "EntityFramework.InMemory": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc2-*",
    "EntityFramework.MicrosoftSqlServer.Design": "7.0.0-rc2-*",
    "EntityFramework.Relational": "7.0.0-rc2-*",
    "EntityFramework7.Npgsql": "3.1.0-beta8-2",
    "Microsoft.Extensions.Logging.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-*",
    "Microsoft.Extensions.DependencyInjection.Abstractions": "1.0.0-rc2-*",
    "Microsoft.Framework.Configuration.CommandLine": "1.0.0-*",
    "Microsoft.Framework.Configuration.EnvironmentVariables": "1.0.0-*",
    "Microsoft.Framework.Configuration.Json": "1.0.0-*"
},
"commands": {
    "ef": "EntityFramework.Commands",
    "dev": "Microsoft.AspNet.Hosting --ASPNET_ENV Development --server Microsoft.AspNet.Server.Kestrel --server.urls http://localhost:5004"
},
"frameworks": {
    "dnxcore50": {}
}
}

Наведений вище список не з config.json, а скоріше project.json, але я все-таки схвалив, оскільки цей список надав мені корисні залежності, про які я раніше не знав.
Рон С

1

У мене виникли проблеми, які відсутні у залежності, а також при спробі заспокоїти посилання на dnxcore50 та dnx451.

Якщо я розумію це право "залежності": {} поділяються між рамками.

Тоді "залежності": {} в межах "рамки": є специфічними для цього фрейму.

dnxcore50 - це модульне виконання (автономне), тому воно в основному містить всі основні режими виконання, необхідні для запуску програми на відміну від класичного .net-фрейму, де у вас є основні залежності, розкидані по інших місцях.

Тож із цим сказаним я хочу дотримуватися мінімального підходу, який я вирішив в якийсь момент влаштувати на mac або linux.

Оновлення натрапило на дивні проблеми залежностей із переглядами cshtml, наразі якраз перейшов із dnx451.

Це мій project.json

{
"webroot": "wwwroot",
"version": "1.0.0-*",

"dependencies": {
    "System.Runtime": "4.0.10",
    "Microsoft.AspNet.Hosting": "1.0.0-beta4",
    "Microsoft.AspNet.Mvc": "6.0.0-beta4",
    "Microsoft.AspNet.Server.IIS": "1.0.0-beta6-12075",
    "Microsoft.AspNet.Server.WebListener": "1.0.0-beta6-12457",
    "Microsoft.Framework.DependencyInjection": "1.0.0-beta4",
    "Microsoft.Framework.DependencyInjection.Interfaces": "1.0.0-beta5"
 },

"commands": {
"web": "Microsoft.AspNet.Hosting --server Microsoft.AspNet.Server.WebListener --server.urls http://admin.heartlegacylocal.com"  },

"frameworks": {
"dnx451": { }
 }
},

"publishExclude": [
"node_modules",
"bower_components",
"**.xproj",
"**.user",
"**.vspscc"
],
"exclude": [
  "wwwroot",
  "node_modules",
  "bower_components"
  ]
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.