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

时间:2015-11-19 15:11:08

标签: c# asp.net-core dnx dnu

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

发布应用程序
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,同样的错误信息。包裹在我的机器上运行。

还有什么需要做才能让应用程序在另一台机器上运行吗?

3 个答案:

答案 0 :(得分:2)

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

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

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

datetime

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

现在,它再次起作用 但要注意!
我确定应该以另一种方式完成(根据host.json文件中的MS)但是 - 正如我写的那样 - 我没有找到hosting.json文件中的条目的任何描述但是在Internet上发现了一个旧版本的提示,如何在project.json文件中执行此操作。

所以只能将其作为临时解决方法,直到我们知道,如何做到正确!
并且仅在已部署的目录中执行此操作(VS-project中的,否则,本地开发者将不再运行!

答案 1 :(得分:2)

通过使用7-zip而不是Windows资源管理器解压缩ZIP文件可以解决问题,另请参阅:.net local assembly load failed with CAS policy

感谢@Kiran Challa的链接。

答案 2 :(得分:0)

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

这将取消屏蔽标记为“不安全”的文件。 (参见Martin提供的link)。

这将以递归方式取消阻止文件(在你的zip的根目录中运行它。)