2009-08-05 151 views
0

当我在VB.NET 3.5项目中的任何地方使用可空操作符时,Visual Studio刚开始向我(在验证网站时)抛出“error BC30037: Character is not valid.”。几个月前,这发生在一位同事身上,但他不记得他是如何解决这个问题的。VB.NET 3.5;编译器抱怨可空类型(如Double?)与“错误BC30037:字符无效”。

例如,如果我将Double?的每个实例更改为Nullable(Of Double),它会编译得很好,其他项目中的其他空项在同一解决方案中的使用仍可继续正常工作。

我试着清理解决方案,关闭Visual Studio,删除Temporary ASP.NET文件,并重新启动Visual Studio无济于事。

还有什么我可以试试吗?

此外:

我以为我会提到,委托语法也是失败的。我有这样一段代码:

Dim hasSkips As Boolean = payments.Where(Function(p) p.Code = "SKIP").Count > 0 
Dim isRegular As Boolean = Not hasSkips 

paymentsIList(Of Payment)Payment对象具有名为Code的字符串属性。在Visual Studio中没有验证错误或任何可见的东西,这使得它认为它不知道该行代码的作用。智能感知工作得很好,但编译器符合语法。下面的两个错误陪上面的代码两行,分别为:

error BC30201: Expression expected. 
error BC30451: Name 'hasSkips' is not declared. 

它几乎看起来好像Visual Studio中没有的它应该了解VB.NET 3.5功能的知识。

+0

不是说它*应该*重要,而是网站或Web应用程序项目? – 2009-08-11 20:14:50

+0

这是一个网站_site_项目 – 2009-08-11 20:40:32

回答

2

我想通了。即使在属性页面中选择了版本之后,也需要指示网站项目使用哪个版本的编译器。将此添加到我的web.config中修复了问题:

<system.codedom> 
    <compilers> 
     <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" warningLevel="4" type="Microsoft.VisualBasic.VBCodeProvider, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
      <providerOption name="CompilerVersion" value="v3.5"/> 
      <providerOption name="OptionInfer" value="true"/> 
      <providerOption name="WarnAsError" value="false"/> 
     </compiler> 
    </compilers> 
</system.codedom> 

嗯,很高兴知道我猜。

+0

@Downvoter:小心解释? – 2011-12-15 00:10:29

-1

我第二次安德鲁的回答。双?是C#语法,它不存在于VB中。 VB使用可空(双)。

+1

你和Andrew一样错了;-) – 2009-08-05 19:29:22

1

我有这个问题 - 但是它是由在项目文件中的损坏引起的 - 一些.aspx页面中如何设定编译....

和编译的ASPX页面,VB指'<%@'字符是无效的...

不得不卸载项目 - 找到有问题的条目并将其删除。