【发布时间】:2023-04-01 07:39:01
【问题描述】:
这个问题可以被认为是两年前的一个更新,询问如何从 Visual Studio 2015 中的开放 ASP.NET Core 解决方案(then called ASP.net vnext,简称为 ASP.NET 5)发布到另一台机器上我的本地网络,上面部署了 IIS,应该用于运行 DNX 运行时和我正在编写的 ASP.NET 应用程序。由于该向导对我没有帮助,我相信我将不得不完全手动配置 MSDEPLOY 解决方案及其配置文件,或者其他等效的东西。
自最初的问题以来情况发生了很大变化,所以我要求使用 ASP.NET 5 和 DNX 1.0 RC1。
有一些 related 其他 questions 询问如何执行此操作并提到 WebDeploy 3.6,并且还指的是近 2 年的 beta 版本。
因此,我相信这个问题对于 Visual Studio 2015 应该有一个新的和不同的答案,因为 ASP.NET 5 处于候选发布版本并且功能完整。现在怎么样了?
还应该明确指出,我不是在谈论从 C:\DEV\WORKINGCOPY 上的 Visual Studio 解决方案部署到我自己机器的 c:\inetpub\wwwroot,而是通过网络复制,通过 web-dav、FTP 或 SMB共享,到运行 IIS 的 windows 服务器框。
到目前为止我所尝试的:
在文件系统模式下使用内置的“发布到 Web”向导。结果似乎是您可以通过 web.cmd 运行的东西,它将执行 dnx 和 kestrel,但不会构建可从 Windows Server 2012 上的 IIS 8.x 运行的包。此外,发布到文件系统模式会创建一堆包括一组名为 approot、logs 和 wwwroot 的基本文件夹,我很确定 IIS 不应该设置为直接提供 approot 或日志文件夹。如果我从 IIS 中查看 wwwroot\ 文件夹的副本,我会看到 500 - Internal server error。这就是我希望 IIS 在不知道如何将 web.config 放入其中并对其进行任何操作时所做的事情。
尝试从命令提示符手动使用
dnu publish和dnu pack,我的想法是也许我可以使用结果替换我的 XYZ-publish.ps1 powershell 文件 PublishProfiles 的内容。 dnu 发布命令失败,并显示“bower 未被识别为内部或外部命令”。 dnu pack 成功,但我不知道如何处理生成的 .nupkg 文件以使其在 IIS 上运行。
我的总体目标是:
-
只需单击一下或键入一个命令即可完成所有工作,包括任何捆绑和构建任何预编译程序集(nuget 程序包是 vNext 与经典 .net 程序集等效的概念)。
为了让我自己和其他读者清楚,在准备部署之前在 IIS 上一次性设置任务是什么,每次单击发布时为您完成的任务是什么,以及如何设置它们。
这似乎是一个基本领域,此时 ASP.NET 5 上的文档非常薄弱,并且该工具目前仅针对希望将包部署到文件夹并从“dnx web”运行它的人进行了优化" (kestrel),或者对于那些想要在 Azure 上部署的人(对于那些在发布向导中的情况,这个过程是完全自动化的)而不是那些想要部署到他们自己运行 IIS 的机器上的人。发布向导缺少这个(对我而言)极其明显的案例;发布到我自己的 Windows 服务器盒,并创建我需要的任何 IIS 脚手架以使其正常工作。
【问题讨论】:
-
如果反对者能指出这个问题有什么问题,我们将不胜感激。
-
bower 工具似乎未随 Visual Studio 分发。要让它安装 NodeJs,然后键入
npm install bower -g以在路径中安装并作为命令行工具访问 bower,您可能必须手动将c:\users\youraccountname\appdata\roaming\npm添加到路径中 -
我认为你的想法是通过脚本组合这些东西。 IOW,您创建一个运行 bower/npm/gulp 等的脚本,然后将 dnu 发布到本地或网络位置,并可选择从那里发布。不过,今天的 IIS 故事完全烂透了。目前让 DNX 应用程序在 IIS 上崩溃是一件痛苦的事情。我怀疑这将在 RC2 中通过新工具得到解决,如果没有,那么肯定会在发布时解决。
-
很好,他们最好改进这个工具,因为它目前很糟糕。但是我想让它现在开始工作,这样我就可以让我的开发团队进行持续交付,所以我会学习并找出解决方案并在此处记录。我在下面的临时答案中未解决的一件事是“将 DNVM/DNX/DNU 工具和依赖项安装在它们在 IIS 中变得可见/可用/可操作的上下文中”。
标签: visual-studio-2015 asp.net-core