我在“netcoreapp1.0”上运行了一个使用Azure Storage Client的Web API。访问blob完全没有问题,但是当我尝试使用表执行任何操作时,它会抛出这个错误:
抛出异常:System.Private.CoreLib.ni.dll中的“Microsoft.WindowsAzure.Storage.StorageException”
其他信息:无法加载文件或程序集'System,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089'。系统找不到指定的文件。
它发生的具体线条如下:
if(await table.ExistsAsync())
即使删除它,每当它遇到实际对Azure进行HTTP调用的行时,它仍然会产生相同的结果。我正在导入“net46”,我也尝试导入我的project.json“net40”,但没有变化。
上面的代码生活在“Cameo.Azure.Storage.Library”中。它的目标是netstandard1.6,它引用了“WindowsAzure.Storage”:“7.2.0”和“NETStandard.Library”:“1.6.0”。
我的project.json如下:
{
"dependencies": {
"Cameo.Azure.Storage.Library": "1.0.0-*",
"Cameo.GeoLocation": "1.0.0-*",
"LightInject": "4.0.11",
"LightInject.Microsoft.DependencyInjection": "1.0.1",
"LocationService.Domain": "1.0.0-*",
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Authentication.JwtBearer": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.0",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Logging": "1.0.0",
"Microsoft.Extensions.Logging.Console": "1.0.0",
"Microsoft.Extensions.Logging.Debug": "1.0.0",
"Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
"Microsoft.NETCore.App": {
"version": "1.0.0",
"type": "platform"
},
"Swashbuckle": "6.0.0-beta902"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"net46",
"net40"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true,
"xmlDoc": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"Areas/**/Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
图书馆的project.json
{
"version": "1.0.0-*",
"dependencies": {
"Cameo.Azure.Storage.Interface": "1.0.0-*",
"LightInject": "4.0.11",
"Microsoft.Extensions.Configuration": "1.0.0",
"Microsoft.Extensions.Options": "1.0.0",
"NETStandard.Library": "1.6.0",
"WindowsAzure.Storage": "7.2.0"
},
"frameworks": {
"netstandard1.6": {
"imports": [
"net46"
]
}
}
}
答案 0 :(得分:4)
您无法在.NET Core中使用.NET 4.0或.NET 4.6程序集。您需要支持.NET Core(如果有)或目标.NET Core的版本。
您在以下部分中所做的只是绕过NuGet目标检查
"frameworks": {
"netcoreapp1.0": {
"imports": [
"net46",
"net40"
]
}
},
但这并不会让.NET 4.x库与.NET Core一起使用。 .NET Core库需要定位netstandard1.x
或netcoreapp1.0
(还有一些 - 但不是全部 - 为Windows Phone 8,8.1或10设计的可移植类库这可能有效,但取决于特定的库),以便与.NET Core一起运行。
最重要的是,您甚至在项目中引用了ASP.NET MVC 5的库,这肯定不会起作用,因为.NET Core中没有System.Web.*
(它紧密耦合到IIS)。
您需要Microsoft 7.2版本的WindowsAzure.Storage软件包,它支持.NET Core,可以在NuGet here上找到。
答案 1 :(得分:0)
将web API中的project.json更改为已解决了这个问题。
"frameworks": {
"netcoreapp1.0": {
"imports": [
"portable-net45+win8"
]
}
}
您只能导入框架的核心或可移植(PCL)版本。参考:
仅对.NET Core和PCL(可移植类库)的版本使用“导入”非常重要。将它与传统.NET Framework中的TFMS一起使用可能会导致问题或故障。