我有一个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);
}
}
在上面的代码中,IPortalPage
和IChannelRequest
是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设计师停止失败?
答案 0 :(得分:18)
我有一个非常类似的问题(我还没解决)。我遇到问题的应用程序是从“网站项目”转换而来的,我无法摆脱这与它有关的感觉。我在VS 2005上。
现在我可以添加的是
a)“有时”(我还不知道到底是什么时候)“转换为Web应用程序”-trick对我有效(但并非总是如此)
b)“有时”(与上述相同)有助于切换到设计师视图,更改内容并保存 - &gt; * .designer.cs重新生成
我将一个控件添加到我的页面后,通常会尝试几个没有修复顺序的东西,直到“某些东西”起作用。
互联网上有很多关于此的噪音,但我找不到它的“真正修复”(还)。除了已经提到的内容之外,我读到的一件事是它可能与(不匹配/不存在)命名空间有关。
当我检查我的应用程序时,* .cs文件中确实没有namespace
声明。所以我添加了它们(在* .cs和* .aspx中),并且有一段时间以为它做到了。但遗憾的是,现在我知道事实并非如此......
答案 1 :(得分:14)
我的解决方案:
答案 2 :(得分:5)
为@ scherand(a)和(b)失败时添加第三个选项:
c)“有时”,这也有效:
<%@ Register... %>
条目<%@ Register... %>
[2010年10月13日添加]:
d)“有时”,以及:
我对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.我能够通过执行以下操作来解决此问题:
答案 8 :(得分:0)
我发现在Visual Studio 2015中有效的另一个解决方案是关闭VS,然后清除以下目录:
再次打开您的解决方案,然后选择Build-&gt; Clean Solution。
现在转到ASPX页面,然后选择Project-&gt; Convert To Web Application