生成设计器文件失败:无法加载文件或程序集

时间:2010-03-30 19:58:25

标签: asp.net visual-studio-2008

我有一个ASP.NET Web应用程序项目,它引用了另一个名为ModusCore(或Modus.Core)的项目。到目前为止,我们已经有了各种使用ModusCore的控件,没有任何问题,但最近我创建了一个导致问题的控件。这是代码:

public class PortalLinkNew : WebControl
{
    public string Text { get; set; }
    public bool AllowPush { get; set; }

    public PortalLinkNew()
    {
        AllowPush = true;
    }

    public IChannelRequest ChannelRequest { get; set; }

    protected override HtmlTextWriterTag TagKey
    {
        get { return HtmlTextWriterTag.A; }
    }

    protected override void AddAttributesToRender(HtmlTextWriter writer)
    {
        try
        {
            base.AddAttributesToRender(writer);
            if (DesignMode || Page == null || !(Page is IPortalPage))
            {
                return;
            }
            string href = "/";
            if (ChannelRequest != null)
            {
                var portalPage = (IPortalPage)Page;
                href = portalPage.Module.PortalRouter.GetLinkUrl(portalPage, ChannelRequest, AllowPush);
            }
            writer.AddAttribute(HtmlTextWriterAttribute.Href, href);
        }
        catch (Exception)
        {

        }
    }

    public override void RenderEndTag(HtmlTextWriter writer)
    {
        writer.Write(Text);
        base.RenderEndTag(writer);
    }
}

在上面的代码中,IPortalPageIChannelRequest是Modus.Core中定义的接口。

我的意图是在我的代码中使用此控件,如下所示:

<tnl:PortalLinkNew ID="CancelButton" runat="server" Text="Cancel" OnInit="CancelButton_Init" />

这实际上编译并运行没有问题,但是当我在Visual Studio 2008中编辑页面(源视图)时,我收到以下警告:

  

设计器文件的生成失败:无法加载文件或程序集“Modus.Core,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。系统找不到指定的文件。

正如它所说,它不会重新生成设计器文件,这意味着在代码隐藏中引用CancelButton控件的任何尝试都会导致编译器错误。根据我在网上找到的建议,我尝试删除相应的.ascx.designer.cs文件并在该页面上使用“转换为Web应用程序”,但它告诉我它无法重建设计器文件,原因与提到的相同上方。

我已经尝试了我能想到的一切:清理解决方案,重新启动Visual Studio,重新启动计算机,删除代码目录并从存储库中提取新内容,删除并重新添加项目和dll引用等。我使用的多台计算机上也出现同样的问题。

如何让VS设计师停止失败?

9 个答案:

答案 0 :(得分:18)

我有一个非常类似的问题(我还没解决)。我遇到问题的应用程序是从“网站项目”转换而来的,我无法摆脱这与它有关的感觉。我在VS 2005上。

现在我可以添加的是

a)“有时”(我还不知道到底是什么时候)“转换为Web应用程序”-trick对我有效(但并非总是如此)

b)“有时”(与上述相同)有助于切换到设计师视图,更改内容并保存 - &gt; * .designer.cs重新生成

我将一个控件添加到我的页面后,通常会尝试几个没有修复顺序的东西,直到“某些东西”起作用。

互联网上有很多关于此的噪音,但我找不到它的“真正修复”(还)。除了已经提到的内容之外,我读到的一件事是它可能与(不匹配/不存在)命名空间有关。

当我检查我的应用程序时,* .cs文件中确实没有namespace声明。所以我添加了它们(在* .cs和* .aspx中),并且有一段时间以为它做到了。但遗憾的是,现在我知道事实并非如此......

答案 1 :(得分:14)

我的解决方案:

  1. 关闭并重新打开Visual Studio。
  2. 你的问题解决了吗?如果没有,请转到1.

答案 2 :(得分:5)

为@ scherand(a)和(b)失败时添加第三个选项:

c)“有时”,这也有效:

  • 删除<%@ Register... %>条目
  • 保存.AS?X文件。让设计师抱怨。
  • 再次添加<%@ Register... %>
  • 再次保存

[2010年10月13日添加]:
d)“有时”,以及:

  • 清除AS?X文件,除了最基本的内容外。
  • 开始一点一点地添加碎片。
  • 保存。
  • 检查您是否收到错误消息。
  • 再加几件。冲洗。重复。

我对AS?X文件的备份副本使用文本比较工具。

我尽量避免添加导致错误的控件直到最后。我也尝试从页面底部添加。但是,我不知道有什么严厉的规定。这是一种直觉感受。

(有人会想出这个吗?)

答案 3 :(得分:2)

我整天都在努力解决这个问题,你不会相信罪魁祸首。我禁用了ReSharper 5.0,突然间错误消失了。难以置信的。

答案 4 :(得分:0)

将缺少的程序集复制到Visual Studio \ Common7 \ IDE \ Public Assemblies目录中,给出了比“无法加载文件或程序集”更具体的错误消息。从这里我注释掉了页面的一些有问题的部分,删除了.designer.cs文件,并从.ascx文件的右键单击上下文菜单中选择了“转换为Web应用程序”。

答案 5 :(得分:0)

好吧,我已经有两天这个问题了。至于没有提出的解决方案完全解决了问题(它看起来非常不稳定),我在项目属性的应用程序选项卡中到达了程序集信息按钮(或类似的东西......我的VS是西班牙语)。我只改变了中性语言......现在它正确地部署了。

我不知道相关性,但在看到“转换为Web应用程序”后,在查看控制台上显示与程序集信息相关的一些错误后,我到达此处。

要确保您的Web应用程序可以部署,您可以查看aspx文件的第一行,并检查所有CodeFiles是否都是CodeBehind。如果看到“Codefile = ...”,它将在部署机器上失败。

很抱歉没有更明确,但这对我来说是一个奇怪的问题:S

答案 6 :(得分:0)

我有一个类似的问题,但我们创建的程序集。在我们的例子中,版本号是非常具体的,所以如果所有文件都说1.0.0.0,这可能不起作用。

首先,删除有问题的aspx文件的设计器文件。右键单击aspx文件并选择“转换为Web应用程序”,类似于其他人的建议。在文件上执行此操作会更快,并且您会看到错误弹出窗口,而不是您必须查找的警告。在我们的例子中,错误是Generation of the designer file for OurPage.aspx failed: Could not load file or assembly 'OurCustomAssembly, Version=1.0.234.567...

我接下来要做的是使用搜索文件内容的工具(例如Agent Ransack)并将其指向我们的源文件夹(也包含构建/缓存文件)并搜索“包含文本”的文件。具体版本。对于出现的每个项目,我删除了对失败的程序集的引用,重新添加它,然后重新构建单个项目。再次搜索显示该版本已经消失。

我再次运行转换为Web应用程序,现在得到了相同的错误但是使用了不同的文件。这次没有上述工作。我能够确定只有一些Register标签存在问题。我删除了那些寄存器标记,在页面的代码隐藏中创建了受保护的变量(因为它们不在设计器文件中)并重新编译了解决方案。之后我删除了我创建,保存,读取所有Register标签,保存的变量。此时,设计器文件生成成功。

可能有一种更简单的方法可以做到这一切,但这就是我最终的工作方式。时间会证明,但希望这是一个永久的解决方案。

答案 7 :(得分:0)

  

我正在使用ReSharper Platform 6.我能够通过执行以下操作来解决此问题:

  1. ReSharper(菜单栏)&gt;选项...
  2. 环境&gt;一般&gt;清除缓存
  3. 重新启动Visual Studio

答案 8 :(得分:0)

我发现在Visual Studio 2015中有效的另一个解决方案是关闭VS,然后清除以下目录:

  • %UserProfile%\ AppData \ Local \ Temp \ Temporary ASP.NET Files \
  • %USERPROFILE%\应用程序数据\本地\微软\ VisualStudio的\ 14.0 \ ProjectAssemblies \

再次打开您的解决方案,然后选择Build-&gt; Clean Solution。

现在转到ASPX页面,然后选择Project-&gt; Convert To Web Application