首页 > 解决方案 > .NET 核心图像大小调整:“无法加载文件或程序集”

问题描述

我正在使用https://github.com/saucecontrol/PhotoSauce为我的 .net core 2.0 网站创建一个图像大小调整中间件。将我的应用程序发布到 Windows Server 2012(.NET Framework 4.7.2)后,它将不再工作。我能做些什么?

2019-04-12 13:34:46.656 +02:00 [ERR] 执行请求时发生未处理的异常。System.IO.FileLoadException:无法加载文件或程序集“System.Runtime,版本=4.2.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。找到的程序集的清单定义与程序集引用不匹配。(HRESULT 异常:0x80131040)文件名:Notenverwaltung.Middleware.MagicScalerImageResizer.Resize(流输入流,流输出流,ImageResizerOptions 选项)的 Notenverwaltung 中的“System.Runtime,版本=4.2.1.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”。 Middleware.ImageHandlerMiddleware.<>c__DisplayClass6_1.b__0() 在 C:\ba\work\6b084d553e5d8510\Notenverwaltung\Notenverwaltung\Middleware\ImageHandlerMiddleware.cs:System.Threading 的第 45 行。

        public async Task InvokeAsync(HttpContext context)
        {
            var path = context.Request.Path.Value;

            if (path.StartsWith($"/{_pathStart}"))
            {
                var pathToImage = _env.WebRootPath + path.Replace($"{_pathStart}/", default(string)).Replace("/", "\\");

                if (File.Exists(pathToImage))
                {
                    int.TryParse(context.Request.Query["w"], out var newImageWidth);
                    int.TryParse(context.Request.Query["h"], out var newImageHeight);
                    var options = new ImageResizerOptions(newImageWidth, newImageHeight);

                    await Task.Factory.StartNew(() =>
                    {
                        _imageResizer.Resize(File.OpenRead(pathToImage), context.Response.Body, options); // <-- It's this that goes wrong
                    });
                }
                else
                {
                    context.Response.StatusCode = (int)HttpStatusCode.NotFound;
                    await context.Response.WriteAsync("NOT FOUND");
                }
                return;
            }
            await _next(context);
        }
public void Resize(Stream inputStream, Stream outputStream, ImageResizerOptions options)
        {
            using (var memoryStream = new MemoryStream())
            {
                var settings = new ProcessImageSettings
                {
                    Width = options.NewWidth,
                    Height = options.NewHeight
                };

                MagicImageProcessor.ProcessImage(inputStream, memoryStream, settings);

                memoryStream.WriteTo(outputStream);
            }
        }

标签: c#.netimageasp.net-coremiddleware

解决方案


推荐阅读