如何在IIS上运行ASP.NET MVC6而不发布应用程序

时间:2015-07-02 20:46:43

标签: asp.net-core

我试图找到一种在IIS上运行MVC6应用程序的方法,但实际上没有进行发布。我不确定这是否可能,如果不可能,将来是否可能?

我希望在之前的版本中有类似的行为,我可以在IIS下运行应用程序时轻松调试代码并进行更改。

4 个答案:

答案 0 :(得分:16)

从你原来的问题(强调添加):

  

我正在尝试找到一种在IIS 上运行MVC6应用程序的方法,但没有实际执行发布

从你的评论到tugberk(重点补充):

  

现在,每当我进行更改时,我都需要调用该dnu publish命令以查看IIS上的更改。 我只希望通过重建来看到它们。

答案和原因

您需要发布。至少有两个原因:

  • IIS需要构建输出和
  • IIS需要一个web.config文件。

IIS可能还需要其他一些东西,我不知道。所以,你需要发布。这不是什么大问题:在一次性设置之后,发布并不需要比重建更长的时间。

为什么需要发布?

在Visual Studio 2015中,如果构建ASP.NET 5 Web应用程序,则解决方案目录下将不会有构建输出,并且IIS需要构建输出。 By default Roslyn仅运行代码分析而不会发出构建输出。

您可以更改该默认值,以便Roslyn确实发出构建输出,但这不会产生IIS所需的web.config文件。转到View> Project Properties> Build并检查“在构建时生成输出”,Roslyn将向artifacts目录发出输出。 E.g:

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网站,则需要进行一次性设置。在一次性设置之后,您可以对代码进行更改并通过两次单击发布。这是一次性设置:

  • 右键单击该项目。
  • 选择发布。
  • 选择文件系统并添加配置文件名称(例如inetpub)。
  • 将目标位置更改为C:\ inetpub \ MyWebApp
  • 在“设置”中,选择适当的设置。例如。
    • 配置:调试
    • 目标DNX版本: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,您可以对代码进行更改,并通过刷新Web浏览器来查看这些更改。不需要重建。这是一个更好的工作流程。

答案 1 :(得分:6)

这是可能的。在项目的根目录下(project.json目录),运行以下命令:

once.Do()

发布完成后,您在dnu publish --runtime active --out bin/artifacts 文件夹下有一些内容。将IIS应用程序池指向我们刚刚创建的bin/artifacts文件夹,它应该可以正常工作。请记住,您至少需要.NET 4.5.1。

答案 2 :(得分:3)

我假设这是一个关于IIS问题的开发。这是可行的,但它需要一些工作。 IIS在没有发布的情况下无法正常运行的原因是因为默认情况下应用程序池上没有设置用户配置文件。您可以做的最简单的事情是在应用程序池上启用用户配置文件,这将允许IIS在用户配置文件文件夹中查找运行时。最重要的是,您需要web.config来指定要使用的运行时版本(dnu publish会为您生成此内容,因此如果需要,您可以执行发布和复制运行时文件夹)。执行此操作后,将IIS指向wwwroot应该正常工作(假设您使用正确的运行时和正确的位置设置了正确的web.config)。

您还需要bin文件夹中的正确AspNet.Loader.dll。如果您使用visual studio,它会将其复制到正确的位置。

答案 3 :(得分:1)

基于 davidfowl 回答我在IIS上运行ASP.NET MVC6而没有发布应用程序。但是我仍然无法通过F5开始调试它(仅通过附加到w3wp.exe)。

无论如何,我希望它会有所帮助:

  • 在项目的根目录中添加"包"目录(或任何你喜欢的名称)。
  • 在global.json文件中添加" packages":" packages"。 e.g:
{
  "projects": [
    "src",
    "test",
    "wrap"
  ],
  "sdk": {
    "version": "1.0.0-beta4"
  },
  "packages": "packages" // <--
}

包将现在存储在此目录中。

  • 创建&#34;运行时&#34;项目根目录中的目录。
  • 将运行时从%userprofile%/。dnx / runtimes复制到/ path /到/ your / project / runtimes
  • 在项目的wwwroot中创建web.config。 e.g:
<?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>
  • 在IIS中创建Web应用程序并将其指向您的项目wwwroot。

我的项目目录结构:

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下运行的应用程序。