无法 运行 使用 dnx 发布的网络应用程序

Cannot run web app published with dnx

我有一个基于 ASP.NET 5 RC1 final 预览模板的应用程序。我通过 运行ning

发布应用
dnu publish --no-source --runtime active --configuration Release

生成的包包含 运行时间 "dnx-clr-win-x64.1.0.0-rc1-final"。

当我将软件包复制到另一台 Windows 机器并尝试 运行 output\approot 目录中的 web 命令时,我收到以下错误:

Error: Unable to load application or execute command 'Microsoft.AspNet.Server.WebListener'. Available commands: web, webListener.
System.NotSupportedException: An attempt was made to load an assembly from a network location which would have caused the assembly to be sandboxed in previous versions of the .NET Framework. This release of the .NET Framework does not enable CAS policy by default, so this load may be dangerous. If this load is not intended to sandbox the assembly, please enable the loadFromRemoteSources switch. See http://go.microsoft.com/fwlink/?LinkId=155569 for more information.
   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.Host.LoaderContainer.Load(AssemblyName assemblyName)
   at Microsoft.Dnx.Runtime.Loader.AssemblyLoaderCache.GetOrAdd(AssemblyName name, Func`2 factory)
   at Microsoft.Dnx.Runtime.Loader.LoadContext.ResolveAssembly(Object sender, ResolveEventArgs args)
   at System.AppDomain.OnAssemblyResolveEvent(RuntimeAssembly assembly, String assemblyFullName)

Kestrel 和 WebListener 我都试过了,同样的错误信息。该软件包适用于我的机器。

要在另一台机器上制作应用程序 运行 还需要做什么吗?

要自行托管应用程序,我有:

  • 部署到文件系统(到我的开发机器的 c 盘)
  • 将 Hosting.ini (C:[app-name]\approot\src[app-name]\ 中的条目 Localhost:5000(默认)更改为我机器的 IP 地址
  • 在我机器的 windows- 防火墙中打开了端口 5000

然后,我就可以通过局域网从另一台机器上加载应用程序了。
请注意,您必须以管理员身份启动 web.cmd
这样做之后,我在我们的内网服务器上做了同样的事情(将整个部署目录复制到内网服务器的c:-驱动器,将hosting.ini中的IP更改为服务器IP并打开端口5000 在 Windows 内联网服务器上的防火墙上。
然后我在 Intranet 服务器上以管理员 web.cmd 身份启动 并且可以在 LAN 中访问该应用程序(服务器 IP:5000 或 DNS 名称:5000)。
注意:我刚刚更新到 RC1 并且项目模板似乎有各种更改(因此,我从头开始重新创建了我的小示例项目)。
特别是 Hosting.ini 文件(我已将本地主机条目更改为机器 IP)没有生成/支持记录器。
我还没有找到任何描述,如何确切地 必须更改 IP(根据 MS,hosting.json 文件中的新内容),但找出来, 可以在 project.json 文件中更改它。
我改变了:

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel",
    "ef": "EntityFramework.Commands"
  },

  "commands": {
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls=http://172.16.1.7:5000",
    "ef": "EntityFramework.Commands"
  },

现在,它又可以工作了。
不过注意啦!
我确定应该以另一种方式完成(根据 hosting.json-文件中的 MS)但是 - 正如我所写 - 我没有找到对 hosting.json- 文件中条目的任何描述但是在 Internet 上找到了一个关于如何在 project.json 文件中执行此操作的旧版本的提示。

所以只将此作为临时解决方法,直到我们知道如何正确执行!
并且只在部署的目录中执行此操作(VS 项目中的 而不是 ,否则,本地开发人员将不再 运行!

可以通过使用 7-zip 而不是 Windows Explorer 提取 ZIP 文件来解决问题,另请参阅:.net local assembly load failed with CAS policy

感谢@Kiran Challa link。

@martin klinke 建议的使用 7-zip 的替代方法,您可以使用 sysinternals / technet 中的 streams -s -d *.* 命令。

这将取消阻止标记为 'unsafe' 的文件(请参阅 Martin 提供的 link)。

这将以递归方式解锁文件(运行 它位于您的 zip 文件的根目录中)。