在已部署的Web应用程序上编译错误,但不在IDE中编译

时间:2010-12-30 18:02:51

标签: c# asp.net visual-studio-2008 .net-3.5

在我部署的Web应用程序中,我收到以下错误:

  

CS0103:名称'releaseLionButton_Click'可以   在当前上下文中不存在

它将此标识为违规行:

<asp:Button ID="releaseLionButton" runat="server" 
            Text="Release the Lion!"
            OnClick="releaseLionButton_Click"></asp:Button>

在代码隐藏文件中,我有以下代码:

internal void releaseLionButton_Click(object sender, EventArgs e)
{
    if (selectedLionCage != null && selectedLionCage.DoorState == DoorState.Closed)
        selectedLionCage.OpenDoor();
}

现在我可以通过将internal更改为protected来消除此错误,这是有道理的,因为ASPX页面将其描述为代码隐藏文件中定义的Page类的“Interits”。

一切都很好。

我不理解的是当我在本地计算机上的IDE中运行程序时,程序与internal一起使用的原因。

我不希望测试人员遇到一百个这样的愚蠢错误,而且我不想为一百个略有不同版本的程序做测试部署文书工作。

如果它不能真正起作用,我希望它在IDE中不能正常工作

所以这是我的问题:

如何在IDE中获取本地版本以生成所有部署版本将要遇到的编译错误?

更多信息可以分散您对真正问题的注意力:

该应用程序的目标框架是“.NET Framework 3.5”。必须是这个,因为它引用了System.DirectoryServices.AccountManagement

相比之下,测试计算机上的错误页面显示“版本信息:Microsoft .NET Framework版本:2.0.50727.4206; ASP.NET版本:2.0.50727.4209”。

然而,目录服务帐户管理代码在测试计算机上运行良好。我不知道那里发生了什么。

我遇到的其他类似问题

这是我正在维护的旧应用程序,它偶尔会给我一些随机ASPX文件的验证警告列表。我修复了所有这些,即使代码仍然有效,因为我喜欢我的代码干净漂亮。我还没有找到一种方法来为所有文件或任何特定文件生成有效的验证警告。

有时当我重构代码时(比如通过更改变量名),它会警告我代码当前没有编译,因此重构可能不起作用。然而,我无法让IDE告诉我为什么它认为代码不会编译。它仍然运行完美,错误列表中不会出现错误或警告!其他时候,由于没有我发现的模式,它在重构期间不会显示警告消息。

关于ASPX文件验证的更新

在回答another question时,有人向我指出,如果为C#编辑器启用了“显示实时语义错误”选项,则ASPX文件的验证将起作用。这就解释了为什么我遇到了其他人似乎没有的问题。

2 个答案:

答案 0 :(得分:3)

问题是,如果你有一个带.aspx和.cs / vb代码隐藏的传统asp.net网站,那么实际上有两个不同的程序集。您的代码隐藏编译为一个程序集,IIS将采用.aspx并将其动态编译到另一个程序集。当您将某些内容标记为内部时,您将定义程序集边界,因此动态aspx程序集无法引用代码隐藏程序集中的内部成员。

现在,至于为什么它不像VS的网络服务器那样工作,我不知道,因为我不熟悉它的细节。但是,您可以做的只是在您的计算机上的IIS中设置您的网站。这样它的行为就像“生产”版本一样。

如果您担心调试它,没有问题,运行具有管理权限的Visual Studio,并且当您的计算机上发生服务器错误时,使用Visual Studio附加到w3wp.exe并且它会解决它并且打破错误。

答案 1 :(得分:0)

我猜您不会在解决方案中编译您的Web项目。

相关问题