例外:无法加载文件或程序集 XXXX 或其依赖项之一。该系统找不到指定的文件

Posted

技术标签:

【中文标题】例外:无法加载文件或程序集 XXXX 或其依赖项之一。该系统找不到指定的文件【英文标题】:Exception: Could not load file or Assembly XXXX or one of it's dependencies. The system cannot find the file specified 【发布时间】:2021-08-14 03:36:37 【问题描述】:

我有一个 C# 解决方案,其中包含 3 个 C# .Net 框架 4.7.2 项目,其中一个简单的类库、一个 Windows 窗体控件库和一个 Windows 窗体测试应用程序。我创建了一个控件,该控件调用公共类“ColorHelper”中的静态函数,用于根据控件的前景色检索辅助混合颜色。当此函数与控件位于同一项目中时,这在设计器和运行时都可以正常工作,但在放置在第三个项目(即类库)中时会引发此异常。我已经引用了这个 3r 项目,还包括了 using 语句。语法看起来不错,编译时没有错误,但是当我想将控件放在测试表单上时,会抛出异常。

using System;
using System.Drawing;

namespace ASD.Drawing.Helpers

    public class ColorHelper : object
    

        public static double BlendColor(double foreColor, double backColor, double alpha)
        
            return Math.Min(Math.Max(backColor + alpha * (foreColor - backColor), 0.0D), 255.0D);
        

        /// <summary>
        /// Adjust the color by lighten or darken the color
        /// </summary>
        /// <param name="color">The base color</param>
        /// <param name="gradientPercentage">The percentage of gradient. Negative to darken the color and negative to lighten the color.</param>
        /// <returns></returns>
        public static Color GradientColor(Color color, int gradientPercentage)
        
            if (gradientPercentage == 100) return color;

            //if positive then blend with white else blend with black
            float backColor = gradientPercentage > 0 ? 255.0F : 0.0F;

            // 0 = transparent foreColor; 1 = opaque foreColor
            double alpha = 1.0F - Math.Abs(Math.Max(Math.Min(gradientPercentage, 100), -100)) / 100.0;

            byte r = (byte)BlendColor(color.R, backColor, alpha);
            byte g = (byte)BlendColor(color.G, backColor, alpha);
            byte b = (byte)BlendColor(color.B, backColor, alpha);

            return Color.FromArgb(color.A, r, g, b);
        
    ;

从 Windows 窗体控件库调用该函数

using ASD.Drawing.Helpers;
using ASD.Forms.Controls;
using System;
using System.Drawing;
using System.Drawing.Drawing2D;

namespace ASD.Forms.Renderers

    /// <summary>
    /// Base class for the button renderers
    /// </summary>
    public class ButtonRenderer : BaseRenderer
    
        ...

        /// <summary>
        /// Draw the body of the control
        /// </summary>
        /// <param name="Gr"></param>
        /// <param name="rc"></param>
        /// <returns></returns>
        public virtual bool DrawBody(Graphics Gr, RectangleF rc)
        
            if (Button == null)
                return false;

            Color bodyColor = Button.ButtonColor;
            Color cDark = ColorHelper.GradientColor(bodyColor, -80);
            ...
        
        ...
    

自从我开始编程(大约 5 年)以来已经有很长一段时间了,我忘记了很多东西,我真的很茫然。有人可以帮帮我吗?

【问题讨论】:

目前我已将 ColorHelper 移回 Windows 窗体控件库项目,但忘记删除项目对 ASD.Drawing 项目(类库)的引用,并引发相同的异常。但是,当我删除项目的引用时,它在设计器和运行时都可以正常工作。我怎么可能无法在 thsi 项目中引用另一个项目? 您在哪里实例化您的 ColorHelper?看起来你像使用静态类一样使用它 试试看:var colorHelper = new ColorHelper();颜色 cDark = colorHelper .GradientColor(bodyColor, -80); 我没有实例化并且确实用作静态类。但我认为问题在于我的项目引用了解决方案中的其他项目。我正在尝试重构自定义控件以在表单中使用。因此控件将在设计器中进行配置,并需要相应地显示。我总是乐于接受建议和改进,因为很多东西已经从我的脑海中消失了。 你在 git 仓库中有这段代码吗? 【参考方案1】:

首先,您在 ASD.Forms.UITest 项目中对 ASD.Forms 的引用已损坏。删除它,编译 ASD.Forms 和 ASD.Drawing 项目并再次将 ASD.Forms 引用添加到 ASD.Forms.UITest,然后确保将 ASD.Forms.UITest 项目设置为启动项目(在项目 > 设置为启动项目)为什么启动项目必须有一个启动文件(例如 .exe)。之后,它应该可以正常工作了:

【讨论】:

谢谢奥古斯托。我已经多次清理和重建解决方案,但它从未奏效。现在我按照您的确切步骤操作,它可以工作了。

以上是关于例外:无法加载文件或程序集 XXXX 或其依赖项之一。该系统找不到指定的文件的主要内容,如果未能解决你的问题,请参考以下文章

无法加载文件或程序集 此处的程序集名称 或其依赖项之一。访问被拒绝

BadImageFormatException 无法加载文件或程序集或其依赖项之一。试图加载格式不正确的程序

无法加载文件或程序集“CefSharp.dll”或其依赖项之一

无法加载文件或程序集“***.dll”或其依赖项之一

无法加载文件或程序集“Oracle.ManagedDataAccessDTC.DLL”或其依赖项之一

无法加载文件或程序集“msshrtmi”或其依赖项之一(Azure 表存储访问)