c# - 是否可以发布 ASP.NET 5 应用程序以使目标计算机不需要安装 DNX?

标签 c# asp.net .net asp.net-core

来自wiki for the main "aspnet" GitHub repo :

"The DNX is an SDK containing all of the bits needed to build and run an application, including the CLR in the case of Core CLR. It can be bin deployed with your application...".

我对这实际上意味着什么有点困惑。根据此描述以及我在 Microsoft 公告和博客文章中看到的其他评论,您似乎可以采用 ASP.NET 5 应用程序并创建一个没有外部依赖项的独立包。该 bundle 将包括您的代码、DNX 运行程序、约 11 兆字节的 CoreCLR 以及您可能使用的任何其他 NuGet 依赖项。 “运行您的应用程序所需的所有位”,准备好放到一个干净的平板目标机器上。

但是,当我使用 dnu publish 时,情况并非如此。生成的包包含我的代码,以及我实际使用的标准库部分的 DLL。但是,它并没有引入整个 CoreCLR……当然也没有引入 DNX。我的 project.json 文件中的 run 命令变成了一个 run.cmd 批处理文件,如下所示:

@"dnx.exe" --appbase "%~dp0approot\src\ConsoleApplication" Microsoft.Framework.ApplicationHost run %*

...表明 DNX 应该已经安装在目标系统上,在此包之外。

我是否遗漏了一些基本的东西?如果您需要在目标系统上安装 DNX,那么我完全不确定这种方法提供了哪些优势。是否可以采取额外的步骤来发布一个完全内置 DNX 和 CoreCLR 且独立的包?

我看到 dnu publish 有一个可选的 --native 参数,但我不确定这是否相关。该参数希望您指定一个运行时。当我使用“clr”时,我收到错误消息,“ native 图像生成仅支持 .NET Core 风格”。当我使用“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)

最佳答案

理论上,您应该能够将您的应用程序部署到一台甚至没有安装 .NET Framework 的机器上,但我记得听说即使是 dnxcore 今天也有一些 .NET Framework 依赖项,稍后会消失(我可能是误会了,值得一试)。

假设这是存在的并且你想实现它,你确实应该使用 --runtime 开关,如果你要通过 active,你需要激活 coreclr > 作为值(value)。

例如:

dnvm use 1.0.0-beta4 -r coreclr -p
Active Version           Runtime Architecture Location                       Al
                                                                             ia
                                                                             s
------ -------           ------- ------------ --------                       --
       1.0.0-beta4       clr     x64          C:\Users\Tugberk\.dnx\runtimes
       1.0.0-beta4       clr     x86          C:\Users\Tugberk\.dnx\runtimes
       1.0.0-beta4       coreclr x64          C:\Users\Tugberk\.dnx\runtimes
  *    1.0.0-beta4       coreclr x86          C:\Users\Tugberk\.dnx\runtimes

这应该将运行时与您的应用程序捆绑在一起。

关于c# - 是否可以发布 ASP.NET 5 应用程序以使目标计算机不需要安装 DNX?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30114649/

相关文章:

c# - 使用模拟时写入事件日志

c#:生成一个新的单个图像,该图像在水平方向上重复另一个图像 x 次

C#如何解析没有键名的json数据?

c# - C# 中多个 block 的 RSA 加密/解密

c# - 在 Windows Phone map 控件上禁用平移和缩放事件

c# - 在 SVG 文件中获取 XML 元素时出现问题

c# - 在 ASP.NET、C# 中流式传输文件?

c# - asp.net MVC 2 使用数据注释验证文件上传

asp.net - 将 GridView 与字符串列表绑定(bind)

c# - 在 C# ASP.net 中将 ALPHA-2 转换为 ALPHA-3