使用VS2015开发WPF应用时遇BC30260控件重复声明错误
解决WPF VB项目编译时BC30260控件重复声明错误
这个错误在VS2015的WPF VB项目里真的挺常见的,我帮你梳理几个最可能的原因和对应的解决办法,亲测有效:
1. 手动声明和自动生成代码冲突了
WPF的VB项目有个特性:只要你在XAML里给控件加了x:Name="btnTestButton",VS就会偷偷在项目obj文件夹下的*.g.vb自动生成代码文件里,帮你声明Friend WithEvents btnTestButton As Button。要是你还在后台的VB代码里手动写了同样的声明,可不就撞车了嘛!
解决办法:
- 打开你的后台VB文件,把那些手动写的
Friend WithEvents [控件名] As [控件类型]的代码删掉,只留XAML里的x:Name就行。VS会自动维护这个声明,不用你操心。
2. 自动生成的代码文件损坏了
有时候VS崩溃、项目异常关闭,会导致*.g.vb这类自动生成的文件损坏,里面可能重复生成了控件声明,编译时就报错。
解决办法:
- 先关掉VS,找到项目文件夹里的
bin和obj文件夹,直接删掉; - 重新打开VS,先点「项目→清理」,再点「生成→重新生成解决方案」。这样VS会重新生成干净的自动代码文件。
3. XAML文件的生成操作设置错了
如果XAML文件的Build Action不是Page,VS没法正确处理控件的自动声明逻辑,也会搞出重复声明的问题。
解决办法:
- 在解决方案资源管理器里右键点出问题的XAML文件,选「属性」;
- 把「生成操作」改成
Page,然后重新生成项目试试。
4. 命名空间/类名不匹配(少见但要排查)
要是XAML根元素的x:Class属性和后台VB类的命名空间、类名对不上,自动生成的代码可能会乱套,导致重复声明。
解决办法:
- 检查XAML根元素的
x:Class,比如是x:Class="MyWpfApp.MainWindow",那后台VB代码里必须是Namespace MyWpfApp包裹着Class MainWindow,完全对应上才行。
举个错误示例,后台手动声明了控件:
' 别这么写!XAML的x:Name已经自动生成声明了 Friend WithEvents btnTestButton As Button Private Sub btnTestButton_Click(sender As Object, e As RoutedEventArgs) Handles btnTestButton.Click ' 按钮逻辑 End Sub
正确的写法是只保留事件处理:
Private Sub btnTestButton_Click(sender As Object, e As RoutedEventArgs) Handles btnTestButton.Click ' 按钮逻辑 End Sub
按上面的步骤排查下来,基本能解决这个BC30260错误。要是还不行,可以试试新建一个干净的WPF VB项目,把现有代码一点点迁过去,排查是不是项目本身的配置出了问题。
内容的提问来源于stack exchange,提问作者Rooq
相关产品推荐
相关产品推荐

