首页 新闻 会员 周边

访问ASP.NET Core MVC站点出错:Could not load file or assembly 'Microsoft.Win32.Registry'

0
悬赏园豆:30 [已解决问题] 解决于 2016-03-10 17:51

dotnet cli的版本是1.0.0-dev-001698,dotnet run命令运行成功,但用浏览器访问时,却出现下面的错误:

An unhandled exception has occurred while executing the request
System.IO.FileNotFoundException: Could not load file or assembly 
'Microsoft.Win32.Registry, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
File name: 'Microsoft.Win32.Registry, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'
   at Microsoft.Extensions.DependencyInjection.DataProtectionServices.<>c.<GetDefaultServices>b__0_0(IServiceProvider services)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.ScopedCallSite.Invoke(ServiceProvider provider)
   at Microsoft.Extensions.DependencyInjection.ServiceProviderExtensions.GetService[T](IServiceProvider provider)
   at Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager..ctor(IServiceProvider services)
   at Microsoft.Extensions.DependencyInjection.DataProtectionServiceDescriptors.<>c.<IKeyManager_Default>b__7_0(IServiceProvider services)
问题补充:

问题是由 Microsoft.AspNetCore.DataProtection 引起的,DataProtectionServices.cs 中引用了 Microsoft.Win32.Registry。

dudu的主页 dudu | 高人七级 | 园豆:31003
提问于:2016-03-08 21:38
< >
分享
最佳答案
0

与project.json的配置有关,使用下面的project.json配置,问题就解决了。

{
    "content": [
        "wwwroot",
        "Views"
    ],
    "compilationOptions": {
        "preserveCompilationContext": true,
        "emitEntryPoint": true
    },
    "dependencies" : {
        "Microsoft.Extensions.Logging.Console": "1.0.0-*",
        "Microsoft.AspNetCore.IISPlatformHandler": "1.0.0-*",
        "Microsoft.AspNetCore.HttpOverrides": "1.0.0-*",
        "Microsoft.AspNetCore.Mvc": "1.0.0-*",
        "Microsoft.AspNetCore.StaticFiles": "1.0.0-*",
        "Microsoft.AspNetCore.Diagnostics": "1.0.0-*",
        "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
        "System.Runtime.Serialization.Primitives": "4.1.0-*",
		"Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-*"
    },
    "frameworks": {
      "netstandardapp1.3": {
        "dependencies": {
          "NETStandard.Library": "1.0.0-*"
        },
        "imports": [
          "dnxcore50",
          "portable-net45+win8"
        ]
      }
    },

    "tools": {
      "dotnet-publish-iis": "1.0.0-*"
    },
    "scripts": {
      "postpublish": "dotnet publish-iis --publish-folder %publish:OutputPath%"
    }
}

 

dudu | 高人七级 |园豆:31003 | 2016-03-10 17:35
其他回答(3)
0

使用了不恰当的注入方式

舟翅桐 | 园豆:675 (小虾三级) | 2016-03-09 11:51
0

1.程序是当前机器 还是部署到其他机器上 部署到其他机器上 需要考虑2 和3 ,当前机器说明编译的时候是有dll的 只是执行的时候找不到 那么在项目中 找到这个dll 看这个dll的路径到底来源于哪儿 

 

2.Could not load file 

这个问题查一下权限

3.查一下 bin目录下是否有

Microsoft.Win32.Registry' 抑或 这个dll的其他dll是否加载进来 (如果不想依赖gac 建议将dll放在bin目录下)

 

 

 

收获园豆:30
小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-09 13:47

是基于.NET Core运行的,服务器是Linux Ubuntu

支持(0) 反对(0) dudu | 园豆:31003 (高人七级) | 2016-03-09 13:51

@dudu:

.NET Core 只是一个基本核心库 他并不是包含所有的dll 打个比方来说 你本地引用的win了com组建 这个组建 在windows装的时候就自带  但是现在你再linux下 用.NET Core 只是表示 运行基本的站点没问题 但是你的这个项目 用的这个com组件 发布的环境有没有还不好说呢 所以找不到也正常

 

总的来说

先找一下当前项目中 是否引用了Microsoft.Win32.Registry 

如果有把它发布到bin目录中 因为 微软的策略是 最优先从 bin目录里面去找dll 如果没有 就去gac里面 也就是环境里面去找 例如system.web这种dll 什么时候看到他发布过呢 因为这些dll windows装framework的时候都自带了 没必要每回都发布 直接从gac里面取就好了

 

而你的这个错误 好像是服务器环境里面没有 Microsoft.Win32.Registry 

考虑到 win和 linux环境的不同 最靠谱不依赖环境(主要指gac)中的dll就是  将所有的dll都发布到 bin目录中

支持(0) 反对(0) 小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2016-03-09 14:57
0

刚才试了一下,在 dotnet cli 1.0.0-beta-002115 下,已经不需要那么复杂的 project.json了。

我用以下 project.json,可以正确的现实一个最基本的 Hello World view 了

 

 1 {
 2     "version": "1.0.0-*",
 3     "compilationOptions": {
 4         "preserveCompilationContext": true,
 5         "emitEntryPoint": true
 6     },
 7     "content": [
 8         "wwwroot",
 9         "Views"
10     ],
11     "dependencies": {
12         "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-*",
13         "Microsoft.AspNetCore.Mvc": "1.0.0-*",
14         "Microsoft.Extensions.Logging.Console": "1.0.0-*",
15         "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-*"
16     },
17     "frameworks": {
18         "netcoreapp1.0": {
19             "dependencies": {
20                 "NETStandard.Library": "1.5.0-*"
21             },
22             "imports": [
23                 "dnxcore50",
24                 "portable-net45+win8"
25             ]
26         }
27     }
28 }

 

零度的火 | 园豆:211 (菜鸟二级) | 2016-03-30 23:06

没有编辑回复的功能啊。

忘了说明,以上是在 OS X 环境下尝试成功。

另外错别字 “现实” -> "显示"。

支持(0) 反对(0) 零度的火 | 园豆:211 (菜鸟二级) | 2016-03-30 23:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册