【问题标题】:If "Option Strict" is off, why does compilation fail with "Option Strict On"?如果“Option Strict”关闭,为什么“Option Strict On”编译失败?
【发布时间】:2011-04-13 19:54:40
【问题描述】:

我继承了一个需要编译的 VB.NET 应用程序,以便在其上运行文档。我第一次收到“Option Strict On 不允许从 x 到 y 的隐式转换”错误,所以我在 Project 文件中关闭了 Option Strict 选项。

那么为什么我仍然失败并显示相同的错误消息?

【问题讨论】:

  • 你能发布导致错误的行吗?
  • Dim ExceptionHandler As ExceptionHandler = Me.LoadControl(ConfigurationSettings.AppSettings("PagesFolder") & "ExceptionHandler.ascx")

标签: vb.net


【解决方案1】:

我第一次收到“Option Strict On 不允许从 x 到 y 的隐式转换”错误,所以我在 Project 文件中关闭了 Option Strict 选项。

与修复错误相反?请原谅我的讽刺,但您选择了错误的修复:而不是禁用 Option Strict应该修复编译器指示的错误。毕竟,Option Strict 的全部意义在于帮助使代码更加健壮。

也就是说,有 四个 位置控制Option Strict(以及所有其他选项):

  1. 控制项目默认值的 Visual Studio 选项,
  2. 项目设置,
  3. web.config 编译器命令行,
  4. 基于文件,源代码文件的顶部行。

检查Option Strict 在位置 2.、3. 和 4. 是否处于关闭状态,并且它是否在位置 1 处于打开状态(因为通常打开 Option Strict Off 是一个非常非常糟糕的主意)。那么问题应该就解决了。

也可以尝试在web.config明确禁用设置。我会在这里做一个肢体,但根据forums.asp.net,这可以通过在<configuration> 节点内直接添加以下内容来完成:

<system.codedom>
    <compilers>
        <compiler compilerOptions ="/optionstrict-" language="vb;vbs;visualbasic;vbscript"
                  extension=".vb"
                  type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    </compilers>
</system.codedom> 

... 可能已经存在 &lt;compiler&gt; 节点 - 修改它。

【讨论】:

  • 是对的。拜托,拜托,非常拜托,通过显式添加正确的强制转换操作来解决问题。
  • 感谢您的回复。首先关心的是,修复错误,不,我不担心。只是想让它进入可构建状态,以便我可以在其上运行文档记录器。第二个问题,项目文件 Option Strict 已关闭,文件级 Option Strict 已关闭,并且(好电话!)Web.Config 没有引用 Option Strict。
  • @magma - 感谢您的关注,这是一个已经投入生产的遗留应用程序,我将重新编写。无论编译在那里的任何选项都已经存在并正在运行,我只想记录它的当前状态。
  • @grefly 嗯。不过,请尝试手动禁用它;查看我的更新。
【解决方案2】:

Option Strict 是防止程序自动进行变量转换,即隐式数据类型转换。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2012-09-04
    相关资源
    最近更新 更多