【发布时间】:2015-10-22 14:07:22
【问题描述】:
我正在尝试找到一种在 IIS 上运行 MVC6 应用程序但没有实际进行发布的方法。我不确定这是否可能,如果没有,将来可能吗?
我希望在应用程序在 IIS 下运行时能够轻松调试我的代码并进行更改,从而实现与以前版本类似的行为。
【问题讨论】:
标签: asp.net-core
我正在尝试找到一种在 IIS 上运行 MVC6 应用程序但没有实际进行发布的方法。我不确定这是否可能,如果没有,将来可能吗?
我希望在应用程序在 IIS 下运行时能够轻松调试我的代码并进行更改,从而实现与以前版本类似的行为。
【问题讨论】:
标签: asp.net-core
来自您的原始问题(已添加重点):
我正在尝试找到一种在 IIS 上运行 MVC6 应用程序的方法但实际上并未进行发布。
来自您对 tugberk 的评论(已添加重点):
现在每次进行更改时,我都需要调用 dnu 发布命令才能在 IIS 上查看我的更改。 我只想通过重建来查看它们。
您需要发布。至少有两个原因:
IIS 可能还需要一些其他的东西,我不知道。所以,你需要发布。这没什么大不了的:在一次性设置之后,发布所需的时间并不比重建所需的时间长。
为什么需要发布?
在 Visual Studio 2015 中,如果您构建 ASP.NET 5 Web 应用程序,您的解决方案目录下将没有构建输出,而 IIS 需要构建输出。 By default Roslyn 只运行代码分析而不发出构建输出。
您可以更改该默认值,以便 Roslyn 发出构建输出,但这不会生成 IIS 需要的 web.config 文件。通过转到View > Project Properties > Build 并检查“生成时生成输出”,Roslyn 将向artifacts 目录发出输出。例如:
artifacts/bin/MyWebApp/Debug/MyWebApp.1.0.0.nupkg
artifacts/bin/MyWebApp/Debug/MyWebApp.1.0.0.symbols.nupkg
artifacts/bin/MyWebApp/Debug/app/project.json
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.dll
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.pdb
artifacts/bin/MyWebApp/Debug/dnx451/MyWebApp.xml
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.dll
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.pdb
artifacts/bin/MyWebApp/Debug/dnxcore50/MyWebApp.xml
如果您将 IIS 指向 artifacts 目录,您现在将遇到既没有 wwwroot 也没有 web.config 的问题。
因此,您需要发布(或制定一些其他复杂的解决方案)以使 IIS 与 ASP.NET 5 一起使用。如果您想从 Visual Studio 发布到本地 IIS 网站,则需要一次性设置。一次性设置后,您可以更改代码并单击两次发布。这是一次性设置:
dnx-clr-win-x64.1.0.0-beta4
发布完成后,将 IIS 指向 C:\inetpub\MyWebApp\wwwroot,您将能够浏览到该网站。更重要的是,您现在可以更改代码,单击两次即可发布,然后刷新 IIS 站点以查看更改。
如果您选择发布到inetpub,请务必以管理员身份运行 Visual Studio,以免收到权限不足错误。
如果您接受默认发布位置(而不是使用如上所示的 inetpub),请注意路径过长错误(即 > 260 个字符。)
为什么不在开发过程中使用 Visual Studio 和 Debug > Start without debugging。使用 Roslyn 和 Visual Studio 2015,您可以对代码进行更改,并通过刷新网络浏览器查看这些更改。无需重建。这是一个更好的工作流程。
【讨论】:
这是可能的。在项目的根目录下(project.json 目录),运行以下命令:
dnu publish --runtime active --out bin/artifacts
发布完成后,bin/artifacts 文件夹下会有一些东西。将 IIS 应用程序池指向我们刚刚创建的 bin/artifacts/wwwroot 文件夹,它应该可以工作。请记住,您至少需要 .NET 4.5.1。
【讨论】:
dnu publish 命令才能在 IIS 上查看我的更改。我只想通过rebuild 看到它们。
我假设这是关于 IIS 问题的发展。这是可行的,但需要一些工作。 IIS 在没有发布的情况下无法开箱即用的原因是因为默认情况下应用程序池上没有用户配置文件设置。您可以做的最简单的事情是在应用程序池上启用用户配置文件,这将允许 IIS 在用户配置文件文件夹中找到运行时。最重要的是,您需要一个 web.config 来指定要使用的运行时版本(dnu publish 会为您生成此文件,因此如果需要,您可以进行发布并复制运行时文件夹)。完成此操作后,将 IIS 指向 wwwroot 应该可以正常工作(假设您使用正确的运行时和正确的位数设置了正确的 web.config)。
您还需要 bin 文件夹中的正确 AspNet.Loader.dll。如果您使用 Visual Studio,它会在正确的位置复制它。
【讨论】:
Load User Profile?我已经启用了。发布应用程序后,web.config 包含运行时文件夹的相对路径。如果我尝试删除 appSettings runtime-path,它会尝试在 C:\Users\DefaultAppPool 中找到 .dnx,但 .dnx 在我的 C:\Users\Zoran Protic 文件夹中。我还尝试将绝对地址指向我的 .dnx 运行时,但随后我开始遇到无法找到目标框架的依赖项的问题。
基于 davidfowl 的回答,我在 IIS 上运行 ASP.NET MVC6 而不发布应用程序。但我仍然无法通过 F5 开始调试它(只能通过附加到 w3wp.exe)。
无论如何,我希望它会有所帮助:
{
"projects": [
"src",
"test",
"wrap"
],
"sdk": {
"version": "1.0.0-beta4"
},
"packages": "packages" // <--
}
包现在将存储在此目录中。
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="bootstrapper-version" value="1.0.0-beta4" />
<add key="dnx-version" value="1.0.0-beta4" />
<add key="dnx-clr" value="clr" />
<add key="dnx-app-base" value=".." />
<add key="runtime-path" value="../../../runtimes" />
</appSettings>
</configuration>
我的项目目录结构:
Projects/
vNext/
packages/
runtimes/
dnx-clr-win-x64.1.0.0-beta4/
dnx-clr-win-x86.1.0.0-beta4/
...
src/
vNext/
wwwroot/ <-- IIS web application points here
web.config
...
project.json
...
global.json
vNext.sln
...
之后,您将能够附加到 w3wp.exe 并调试在 IIS 下运行的应用程序。
【讨论】: