在IIS上托管rc1-final-update1的问题

时间:2015-12-29 21:51:58

标签: asp.net-core iis-8

当我从Visual Studio(在IIS Express中)在我的计算机上运行它时工作得很好。但是当我尝试在我的服务器(WS 2012,IIS 8)上托管该网站时,该页面将永远加载。

我在日志中发现了这个错误:

C:\iis\beta\wwwroot>SET DNX_FOLDER=dnx-clr-win-x86.1.0.0-rc1-update1 

C:\iis\beta\wwwroot>SET "LOCAL_DNX=C:\iis\beta\approot\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe" 

C:\iis\beta\wwwroot>IF EXIST C:\iis\beta\approot\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe (SET "DNX_PATH=C:\iis\beta\approot\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe" ) 

C:\iis\beta\wwwroot>for %a in ((null)) do (IF EXIST %a\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe (
SET "HOME_DNX=%a\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe"  
 goto :continue 
) ) 

C:\iis\beta\wwwroot>IF "" NEQ "" (SET "DNX_PATH=" ) 

C:\iis\beta\wwwroot>IF "C:\iis\beta\approot\runtimes\dnx-clr-win-x86.1.0.0-rc1-update1\bin\dnx.exe" == "" (SET "DNX_PATH=dnx.exe" ) 
Error: Unable to load application or execute command 'Microsoft.AspNet.Server.Kestrel'. Available commands: web, ef.
System.IO.FileNotFoundException: The system cannot find the file specified. (Exception from HRESULT: 0x80070002)
   at System.Reflection.RuntimeAssembly.nLoadFile(String path, Evidence evidence)
   at System.Reflection.Assembly.LoadFile(String path)
   at Microsoft.Dnx.Runtime.Loader.LoadContext.LoadFile(String assemblyPath)
   at Microsoft.Dnx.Runtime.Loader.PackageAssemblyLoader.Load(AssemblyName assemblyName, IAssemblyLoadContext loadContext)
   at Microsoft.Dnx.Runtime.Loader.PackageAssemblyLoader.Load(AssemblyName assemblyName)
   at Microsoft.Dnx.Host.LoaderContainer.Load(AssemblyName assemblyName)
   at Microsoft.Dnx.Host.DefaultLoadContext.LoadAssembly(AssemblyName assemblyName)
   at Microsoft.Dnx.Runtime.Loader.AssemblyLoaderCache.GetOrAdd(AssemblyName name, Func`2 factory)
   at Microsoft.Dnx.Runtime.Loader.LoadContext.LoadAssemblyImpl(AssemblyName assemblyName)
   at Microsoft.Dnx.Runtime.Loader.LoadContext.ResolveAssembly(Object sender, ResolveEventArgs args)
   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)

这是我的project.json:

    {
  "webroot": "wwwroot",
  "userSecretsId": "aspnet5-gplayweb-11fc9aea-7741-4cff-ba1f-fc74dfb7600b",
  "version": "1.0.0-*",

  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
    "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
    "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
    "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
    "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
    "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
    "Microsoft.AspNet.Session": "1.0.0-rc1-final",
    "MySql.Data": "6.9.8"
  },
  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

  "frameworks": {
    "dnx451": { }
  },

  "exclude": [
    "wwwroot",
    "node_modules"
  ],
  "publishExclude": [
    "**.user",
    "**.vspscc"
  ]
}

4 个答案:

答案 0 :(得分:6)

我通过从approot \ src \ website \。

中删除global.json来解决问题

答案 1 :(得分:1)

F Andrei的答案为基础。可以将此片段放在项目文件中,以在每个文件系统发布后删除global.json。

<Target Name="AfterFileSystemPublish" AfterTargets="FileSystemPublish" Condition="'$(publishUrl)' != ''">
    <!-- 
          remove the src/*/global.json file as it prevents the web site from starting under IIS 
     -->
    <Message Text="Workaround:  Removing $(publishUrl)\approot\src\$(ProjectName)\global.json" Importance="high"/>
    <Exec WorkingDirectory="$(ProjectDir)" Command="del $(publishUrl)\approot\src\$(ProjectName)\global.json"/>
</Target>

答案 2 :(得分:0)

请确保您在服务器上安装了HttpPlatformHandler。您的应用程序池应配置为“无管理代码”

也可以在Configure方法的启动文件中确保您拥有以下行

application.UseIISPlatformHandler();

答案 3 :(得分:0)

起初问题看起来并不那么明显。我遇到了同样的错误,经过一番努力后得出了解决方案。

  1. 与java存储库一样,新的dnx项目结构保持user / xxx / .nuget / packages / 所有的依赖关系,所以如果存在一个名称,那么dnx会在那里查找包
  2. 此案例其中一个软件包已损坏。所以解决方案是 如果您不确切知道发生了异常,请删除.nuget中的所有包。然后dnu restore将再次下载所有包。 然后问题就解决了。