【问题标题】:VB Auto Implemented Properties under IISIIS下的VB自动实现属性
【发布时间】:2020-11-24 15:27:51
【问题描述】:

我有一个针对 .NET Framework 4.7.2 版本的 VB.NET 项目。它是一个部署到 IIS 的 ASP WebForms 项目(是的!可怜的我)。

现在我正在清理这个地方。我打算在模型类中使用自动实现的属性来减少已经太多的 VB 代码。

它在开发中运行良好。但我终其一生都无法理解为什么它不能在生产环境中工作。

问题归结为这样的类:

Public Class ValorAtributo
    Public Sub New(codigo As String, descricao As String)
        Me.Codigo = codigo
        Me.Descricao = descricao
    End Sub

    Public ReadOnly Property Codigo As String
    Public ReadOnly Property Descricao As String
End Class

在 IIS 生产服务器中,它在 Me.Descricao = descricao 行中失败,并显示以下消息:

BC30456:“Descricao”不是 'PesquisaAtributo.ValorAtributo'。

调查 IIS 部署

我对所有 .NET 风格以及它们究竟在哪里发挥作用感到非常困惑。我的理解是 IIS 使用 .NET CLR 而不是 .NET Framework。但至少说了一半,与上一条消息一起,可以看到生产 IIS 正在使用不同的版本。

Microsoft .NET Framework 版本:4.0.30319; Versão do ASP.NET:4.7.3535.0

这很令人困惑,因为 web 配置文件只提到了 .NET 4.7.2。

 <compilation debug="true" strict="false" explicit="true" targetFramework="4.7.2">
...
<httpRuntime targetFramework="4.7.2"  maxRequestLength="15360"/>

更令人困惑的是,IIS 上的应用程序池仅显示最高 4.0 的 .NET(这次是 CLR,我找不到 .NET Framework)。

尝试解决方案

所以我需要(想要)使用自动实现的属性。必须对此进行修复。

我有根据的猜测是,这是由过时的 .NET Framework 引起的。但是我没有得到我应该做什么。我已经阅读了有关其工作原理的冲突版本,IIS 使用 CLR 与使用 .NET。简而言之,就是一团糟。

你们中的任何一位高效的 Microsoft 开发人员都可以启发我了解我在这里缺少什么吗?

更新

进一步观察

我在最初写这篇文章时错过的异常的网络版本有更长的跟踪。

它很长,所以在玩诡计,这是一个pastebin。 https://pastebin.com/1NhY6SMa

以前的,但可能类似?问题

VB Auto Implemented Property not compiling

出乎意料

该代码以前可以编译并且运行良好。我可以尝试使用 git 来尝试找出发生了什么,我可以肯定地说这个文件从那以后就没有改变过。

【问题讨论】:

  • 您是否通过 IIS 的 Windows 功能安装了 ASP.NET4.7 和 .NET Extensibility4.7?
  • @AlexB。嗨,我添加了已安装功能的屏幕截图。我不确定这是否是正确的地方,但 ASP 4.7 没有选项。安装 .NET 4.7.2 Runtime 表示安装了较新的版本。
  • 什么操作系统正在运行您的 IIS?
  • This 安装程序适用于 MS Servcer 2012、2016 和 Win 10 等。
  • 嗯,很奇怪。您可以尝试卸载并重新安装 4.7.2。但我没有想法。

标签: asp.net vb.net iis webforms


【解决方案1】:

所以。也许不是对确切问题的答案。但由于没有人能够查明问题所在,而我们确实需要启动并运行它,所以这是我们的解决方案。

不要使用自动属性

不便宜,但简单。微软非常昂贵,避免它。

【讨论】:

    【解决方案2】:

    发生这种情况是因为您的代码无法在您的 web-app/asp.net 内的输出代码/库中访问。 解决: 在 Visual Studio 的项目资源管理器中右键单击您的类(在您的情况下是“ValorAtributo”)然后 “属性”然后更改“编译”中的“构建操作”。 在这种模式下,您的类包含在输出代码中。 我的 IDE 是意大利语的,但你可以理解这个概念。

    【讨论】:

    • 您好,谢谢。我发布的大多数图片都是葡萄牙语..所以没问题。但是,我可能错过了原始问题中的一些重要部分;它已更新以添加这些(检查粘贴箱)。直接针对您的回答,我在 Solution Explorer 中没有像您一样的 Properties 选项,如果这一切都与同一文件中的一堆类相关(也与您显示的有所不同)。跨度>
    • 如果你把鼠标移到这个文件上然后你点击鼠标右键你有没有带有一些选项的迷你窗口,其中的选项是“属性”或类似的东西?
    • 如果你的意思是上下文窗口。没有。没有属性选项如果我右键单击 .vb 文件,则没有Properties 选项。我理解你的建议,但没有Properties 选项。我可以在选择文件的情况下打开“属性”选项卡,但是您没有显示任何选项。
    • 你能贴一张你正在谈论的这个属性的图片吗?
    • 有关网络应用程序和网站的差异,您可以查看这里docs.microsoft.com/en-us/previous-versions/aspnet/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多