我了解 DNX 提供了调用 ASP.NET v5 应用程序的各种新包管理功能的能力。
但是,是否可以“构建”其中一个应用程序(使用 DNX 等)并“预编译”它们,以便它们可以部署到(使用 Octopus)并使用 .NET 框架 4.5 在未修改的 IIS 服务器上运行?
在创建项目时,我可以选择以 .NET 4.5 为目标,虽然在我们的构建服务器上安装 DNX 不太可能成为问题,但现在将其推送到我们的生产 Web 服务器还为时过早。
我发现这确实是可能的。
我通过在与文件相同的目录中运行以下命令来发布我的应用程序project.json
:
dnu publish --runtime runtimeX --no-source
在哪里runtimeX
找到合适的安装运行时使用:
dnvm list
但这仅列出了已安装的运行时,因此需要以下内容来获取要用作参数的全名dnu
:
dnvm name default
您可以检查 dnvm 的“名称”命令的 args,但实际上您指定了处理器位数和运行时版本,然后您会得到格式正确的名称。
完成此操作后,获取其中的内容bin\output
并在 IIS 或 IISExpress 中运行它。即使我将此输出复制到尚未安装 VS2015/DNX 工具的其他开发 VM 中,这对我来说也很有吸引力。
不。您说您可以在 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/runtimes 中包含一个副本。尼尔的回答提供了更多细节。它避免了单独安装 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>
这个“引导程序”实际上只是为了提供与 IIS 的向后兼容性。它不在其他环境中使用。例如,如果直接调用使用 http.sys DNX.exe 的自托管并提供程序集和参数。