【问题标题】:How to compile asp.net website project as case sensitive?如何将 asp.net 网站项目编译为区分大小写?
【发布时间】:2017-02-18 19:26:12
【问题描述】:

最近我已将我的 ASP.Net 网站 转换为 ASP.Net Web 应用程序

由于这是一个巨大的项目,我会遇到一些不排除的错误

最近的一个是区分大小写问题

当我尝试编译时,它编译为不区分大小写的变量,因此不会出现问题

但是在运行时,它是区分大小写的,因此会出现“ambiguous match found”错误

如何在运行环境中发生之前扫描整个项目以找到此类匹配项?类型

【问题讨论】:

  • C# 和 javascript 区分大小写,无论应用类型如何。你确定这是问题所在?
  • 是的。我只是在我的应用程序中的那个问题。我在一页中发现了错误,但它可能在更多页中发生。这里我的案例示例: 2 次定义文字 字面意思>。它没有给出任何错误,但是当我运行并进入该页面时,它给出了错误
  • 也许你应该这样做,这样你的名字就不会冲突。
  • 老实说,如果我是你,我会修复所有错误。我想不出其他办法。

标签: c# asp.net visual-studio visual-studio-2017 web-site-project


【解决方案1】:

首先,asp.net Web 表单控件 ID 区分大小写,因为它们充当相应服务器控件的访问标识符。 关联的 html 客户端 ID 是使用 here 描述的逻辑生成的。

如果我猜对了,您是通过复制粘贴方法而不是发布来部署网站。转换后,您不再可以复制粘贴项目,您必须发布它(因为它是一个 Web 应用程序)

您收到运行时错误的原因是您在页面指令后面有许多代码,它们指向同一个部分类。为了给你一个想法,假设你有PageA.aspxPageB.aspx。您的项目中应该有两个不同的类Partial Class PageAPartial Class PageB。您必须检查所有页面指令以指向正确的代码隐藏文件,该文件应指向正确的文件和类。

例子:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageA.aspx.cs"
Inherits="PageA" %>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="PageB.aspx.cs"
Inherits="PageB" %>

当网站作为整个项目复制粘贴部署在服务器上时,这不会影响运行时,因为每个页面都是显式编译的。

当您部署已发布的 Web 应用程序时,所有库都预先存在于 bin 文件夹中,因此生成的库文件中存在不明确的定义。因此,在运行时,您会收到此错误。

希望这能解决您的问题。

【讨论】:

  • 好吧,当我尝试发布时,它发布时没有任何错误。但是当我在调试模式下本地测试它并输入冲突的名称页面时,它会引发错误。所以我想知道有什么方法可以检测到这样的冲突页面,而无需导航到每个页面:)
  • 没有开箱即用的“自动”方式来通知您此类错误。您可以创建自己的预构建操作,该操作将扫描项目中的所有 .aspxaspx.cs 文件,并将与此类错误相关的任何结果显示到输出窗口。最后这些文件是否太多以至于您需要自动化才能找到?只需一一更正/重命名类名和定义。
猜你喜欢
  • 2012-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-28
相关资源
最近更新 更多