Из wiki для основного "aspnet" репозитория GitHub:
"DNX - это SDK, содержащий все биты, необходимые для сборки и запуска приложение, включая CLR в случае Core CLR. Может быть bin, развернутый с вашим приложением...".
Я немного смущен тем, что это на самом деле означает. Основываясь на этом описании и других комментариях, которые я видел в сообщениях Microsoft и сообщениях в блогах, казалось бы, вы могли бы принять приложение ASP.NET 5 и создать автономный пакет без внешних зависимостей. В комплект поставки входит ваш код, бегун DNX, 11 мегабайт CoreCLR и любые другие зависимости NuGet, которые вы можете использовать. "Все биты, необходимые для запуска вашего приложения", готовые к удалению на чистую целевую машину сланца.
Однако, когда я использую dnu publish
, это не то, что происходит. Получающийся пакет содержит мой код и DLL для частей стандартной библиотеки, которые я фактически использую. Тем не менее, он не тянет во весь CoreCLR... и это, конечно, не тянет в DNX. Команда run
из моего файла project.json
превращается в пакетный файл run.cmd
, который выглядит следующим образом:
@"dnx.exe" --appbase "%~dp0approot\src\ConsoleApplication" Microsoft.Framework.ApplicationHost run %*
... предполагая, что DNX, как ожидается, уже будет установлен в целевой системе, вне этого пакета.
Я пропустил что-то фундаментальное здесь? Если вам нужна DNX, установленная в целевой системе, то я не уверен, какие преимущества предоставляет этот подход вообще. Есть ли еще один шаг, который можно предпринять, чтобы опубликовать пакет, который имеет DNX и CoreCLR полностью запеченный и автономный?
Я вижу, что dnu publish
имеет необязательный аргумент --native
, но я не уверен, что это имеет значение. Этот аргумент требует указать время выполнения. Когда я использую "clr", я получаю сообщение об ошибке "Native image generation is only supported for .NET Core flavors
". Когда я использую "coreclr", я получаю этот уродливый стек:
C:\Users\Steve\Desktop\ConsoleApplication>dnu publish --native --runtime active
System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.Framework.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Framework.Project, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' ---> System.IO.FileNotFoundException: Could not load the specified file.
File name: 'Microsoft.Framework.Project'
at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(AssemblyName assemblyName)
at System.Runtime.Loader.AssemblyLoadContext.Resolve(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
at Microsoft.Framework.PackageManager.Publish.NativeImageGenerator.<>c.<Create>b__4_0(String r)
at System.Linq.Lookup`2.Create[TSource](IEnumerable`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
at System.Linq.GroupedEnumerable`3.GetEnumerator()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Linq.Enumerable.Any[TSource](IEnumerable`1 source)
at Microsoft.Framework.PackageManager.Publish.NativeImageGenerator.Create(PublishOptions options, PublishRoot root, IEnumerable`1 contexts)
at Microsoft.Framework.PackageManager.Publish.PublishManager.Publish()
at Microsoft.Framework.PackageManager.Program.<>c__DisplayClass3_2.<Main>b__4()
at Microsoft.Framework.Runtime.Common.CommandLine.CommandLineApplication.Execute(String[] args)
at Microsoft.Framework.PackageManager.Program.Main(String[] args)
System.IO.FileNotFoundException: Could not load the specified file.
File name: 'Microsoft.Framework.Project'
at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(AssemblyName assemblyName)
at System.Runtime.Loader.AssemblyLoadContext.Resolve(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)