我有一个MVC6网站,它必须在完整的网络框架之上运行,因为它依赖于尚未更新以支持Net Core的各种库。
我想我可能错误地配置了project.json文件。这就是我所拥有的:
{
"dependencies": {
"Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
"Microsoft.AspNetCore.Diagnostics": "1.0.0",
"Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
"Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
"Microsoft.AspNetCore.Mvc": "1.0.1",
"Microsoft.AspNetCore.Razor.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.1",
"Microsoft.AspNetCore.StaticFiles": "1.0.0",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.Extensions.Caching.Memory": "1.0.0",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
"Microsoft.Extensions.Configuration.Json": "1.0.0",
"Microsoft.Extensions.Configuration.UserSecrets": "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.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
"version": "1.0.0-preview2-final",
"type": "build"
},
"Serilog": "2.2.1",
"Serilog.Sinks.RollingFile": "3.0.1",
"Serilog.Sinks.Literate": "2.0.0",
"Serilog.Extensions.Logging": "1.2.0",
"AutoMapper": "5.1.1",
"WindowsAzure.Storage": "7.2.1",
"Microsoft.Azure.WebJobs": "1.1.2",
"Microsoft.WindowsAzure.ConfigurationManager": "3.2.1",
"UploadFramework": "1.0.0-*",
"ConnellDataCore": "1.0.0-*",
"ConnellData": "1.0.0-*",
"System.IO.Compression": "4.1.0",
"BundlerMinifier.Core": "2.2.281"
},
"tools": {
"BundlerMinifier.Core": "2.0.238",
"Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
"Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
"version": "1.0.0-preview2-final",
"imports": [
"portable-net45+win8"
]
}
},
"frameworks": {
"net46": { }
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"Areas/**/Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"prepublish": [ "bower install", "dotnet bundle" ],
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
这一项所依赖的所有项目都建立在Net46之上。 project.json文件都有以下条目:
"frameworks": {
"net46": {
"frameworkAssemblies": {
"System.Configuration": "4.0.0.0"
}
}
}
虽然在这个特定的例子中我合并了frameworkAssemblies条目,因为我需要访问ConfigurationManager(如果这不是解决该问题的正确方法,请提供建议)。
这是配置ASPNET Core / EF Core应用程序在Net46上运行的正确方法吗?如果没有,我需要改变什么?
其他信息
我遇到的问题涉及System.IO.Compression程序集。具体来说,发生了什么是我的解决方案,但每当网站试图访问ZipArchive时,它就会崩溃。因为System.IO.Compression.dll没有部署到站点的bin目录(有趣的是,部署了System.IO.Compression.Zip.dll ,但它对System.IO.Compression没用。 .DLL)。
我通过手动将System.IO.Compression复制到网站的bin文件夹来“解决”了这个问题。但是,在发布站点时,手动复制的DLL不会部署到Azure,因此基于Azure的站点会出现同样的崩溃问题。
在尝试解决这个问题时,我在所有各种项目中进行了挖掘,并检查了System.IO.Compression DLL的文件版本。我发现了一个奇怪的问题:我的子项目(网站所依赖的)中包含的System.IO.Compression DLL正在从NetCore程序集缓存部署,而不是标准的Net4.6缓存。
我不知道这意味着什么。但我认为这可能与我遇到的问题有关。
所以我的目标是,以某种方式确保>>没有<<项目从Net Core部署任何程序集。
不幸的是,我不知道该怎么做。我怀疑这个问题涉及一些参考,也许是ASPNET Core本身,它坚持/默认使用Net Core程序集。但我不知道如何告诉它不要。
答案 0 :(得分:0)
没有被复制的dll与.net核心无关,我不确定它的问题是什么,dll没有被复制,因为你的代码中没有直接引用它。 System.IO.Compression.Zip.dll被复制,因为您在代码中的某个位置实例化对象或从该DLL调用静态方法。
当实体框架6发布时,他们将SqlServer提供程序移动到一个单独的dll中,并且所有地方都发生了故障,因为没有人在代码中直接引用它,因此没有部署它。
Rob Lang对他的adventures和最终解决方案进行了有趣的阅读:
var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
在使用本地报告部署应用程序时,我也看到了所有SqlServer数据类型dll的类似问题,我采用了不同的方法并直接在Web项目中引用了dll(有很多)并设置它们所有复制本地true,我相信只要dll在发布或部署的项目中被重新引用,它们也将被复制到输出文件夹中,但如果它们被正在发布的项目引用的类库引用/部署他们不会。