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 是意大利语,但你可以理解这个概念。
所以。也许不是确切问题的答案。但由于没有人能够查明问题所在,我们确实需要它 运行,这是我们的解决方案。
不使用自动属性
不便宜,但简单。微软很贵,避开它。
我在 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"/>
尝试解决方案
所以我需要(想要)使用自动实现的属性。必须对此进行修复。
据我所知,这是由过时的 .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 包含在输出代码中。
所以。也许不是确切问题的答案。但由于没有人能够查明问题所在,我们确实需要它 运行,这是我们的解决方案。
不使用自动属性
不便宜,但简单。微软很贵,避开它。