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。
与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%" } }
使用了不恰当的注入方式
1.程序是当前机器 还是部署到其他机器上 部署到其他机器上 需要考虑2 和3 ,当前机器说明编译的时候是有dll的 只是执行的时候找不到 那么在项目中 找到这个dll 看这个dll的路径到底来源于哪儿
这个问题查一下权限
3.查一下 bin目录下是否有
Microsoft.Win32.Registry' 抑或 这个dll的其他dll是否加载进来 (如果不想依赖gac 建议将dll放在bin目录下)
是基于.NET Core运行的,服务器是Linux Ubuntu
@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目录中
刚才试了一下,在 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 }
没有编辑回复的功能啊。
忘了说明,以上是在 OS X 环境下尝试成功。
另外错别字 “现实” -> "显示"。