没有DNX的ASP.NET v5

时间:2015-06-19 13:47:57

标签: asp.net .net dnx dnvm

据我所知,DNX提供了调用ASP.NET v5应用程序的各种新程序包管理功能的功能。

但是,是否可以“构建”其中一个应用程序(使用DNX等)并“预编译”它们以便可以部署到(使用Octopus)并使用.NET在未修改的IIS服务器上运行框架4.5?

我可以选择在创建项目时使用.NET 4.5,而在我们的构建服务器上安装DNX不太可能成为问题,现在将其推送到我们的生产Web服务器还为时尚早。

2 个答案:

答案 0 :(得分:1)

我发现这确实是可能的。

我通过在与project.json文件相同的目录中运行以下命令来发布我的应用程序:

dnu publish --runtime runtimeX --no-source

其中runtimeX是使用以下命令找到的适当安装的运行时:

dnvm list

这仅列出已安装的运行时,因此需要以下内容才能将全名用作dnu的参数:

dnvm name default

您可以检查arg是否有dnvm的“name”命令,但基本上您指定了处理器位数和运行时版本,并且您将获得格式正确的名称。

完成此操作后,请获取bin\output的内容并在IIS或IISExpress中运行它。虽然我把这个输出复制到我还没有安装VS2015 / DNX工具的其他开发虚拟机,但对我来说就像是一个魅力。

答案 1 :(得分:1)

没有。你说你可以在ASP.NET中定位.Net 4.5,但这并不准确,你可以定位dnx451,即.Net Full Framework 4.5.1 + DNX。

DNX没有像.Net Framework那样“安装”。它不是真正的安装,更像是一个xcopy。 DNVM只需下载DNX的特定副本并将其放入c:\ Users \ .dnx \ runtimes下的文件夹中。如果你不想使用dnx,你可以只复制该文件夹。当应用程序引用特定版本的运行时,它只是按照约定在正确的文件夹中调用dnx.exe c:\Users\<User>\.dnx\runtimes\<dnx-runtimetype-os-architecture.version>\bin\dnx.exe

如果您想避免单独的步骤,--runtime中的dnu publish选项将在应用程序文件夹结构/ approot /运行时中包含一个副本,方法是从本地开发计算机获取副本。尼尔的回答提供了更多细节。它避免了单独安装dnx的要求,但仍然使用dnx。使用--no-source不是必需的,并且与将运行时与应用程序捆绑在一起的决定无关。

如果您想知道IIS如何“找到”dnx开始执行,当您发布项目时,项目包含在/wwwroot/bin/AspNetLoader.dll中。这为IIS提供了一个入口点。此外,还包含一个小的web.config,它提供了dnx可执行文件的位置。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings>
    <add key="bootstrapper-version" value="1.0.0-beta4" />
    <add key="runtime-path" value="..\approot\runtimes" />
    <add key="dnx-version" value="1.0.0-beta6-12120" />
    <add key="dnx-clr" value="coreclr" />
    <add key="dnx-app-base" value="..\approot\src\AspDotNetFiveDemo.Web" />
  </appSettings>
</configuration>

这个'bootstrap'实际上只是为了向后提供与IIS的兼容性。它不用于其他环境。例如,如果直接调用使用http.sys DNX.exe的自托管并提供程序集和参数。