VB IIS 下自动实现的属性

VB Auto Implemented Properties under IIS

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

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

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

问题归结为 class 像这样:

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' is not a member of 'PesquisaAtributo.ValorAtributo'.

调查 IIS 部署

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

Microsoft .NET Framework Versão: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 上的应用程序池只显示 .NET 最高 4.0(这次是 CLR,没有提到我能找到的 .NET Framework)。

尝试解决方案

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

据我所知,这是由过时的 .NET Framework 引起的。但是我不知道我应该做什么。我读过有关其工作原理的相互矛盾的版本,IIS 使用 CLR 与使用 .NET。总之就是一塌糊涂

你们中任何高效的 Microsoft 开发人员都可以告诉我我在这里缺少什么吗?

更新

进一步看

我在最初编写 post.

时错过的异常的 Web 版本中有更长的跟踪

它很长,SO在耍花样,这里是它的一个pastebin。 https://pastebin.com/1NhY6SMa

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

出乎意料

该代码之前可以编译并且工作正常。我可以尝试使用 git 来尝试弄清楚发生了什么,我可以肯定地说这个文件从那以后就没有改变过。

发生这种情况是因为在 web-app/asp.net 中的输出 code/library 中无法访问您的代码。 解决: 在 Visual Studio 的项目浏览器中右键单击你的 class(在你的例子中是“ValorAtributo”)然后 “Properties”然后在“Compile”中更改“Build Action”。 在这种模式下,您的 class 包含在输出代码中。 我的 IDE 是意大利语,但你可以理解这个概念。

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

不使用自动属性

不便宜,但简单。微软很贵,避开它。