C#转VB.NET后出现BC30663错误:特性重复应用问题求助
解决VB.NET中BC30663属性重复应用错误
问题场景
将C#自动生成的资源类转换为VB.NET模块后,编译时触发错误BC30663,提示CompilerGeneratedAttribute和DebuggerNonUserCodeAttribute不能被多次应用,但原C#代码可正常运行。
错误原因
转换后的VB.NET代码中,同一属性被重复声明:
- 既使用了简写形式
<DebuggerNonUserCode>、<CompilerGenerated> - 又显式添加了完整命名空间的属性
Global.System.Diagnostics.DebuggerNonUserCodeAttribute()、Global.System.Runtime.CompilerServices.CompilerGeneratedAttribute()
而C#代码中每个属性仅标注一次,因此不会触发重复应用的错误。
修正后的VB.NET代码
移除重复的属性声明,保留一组即可,同时确保资源管理器的命名空间与项目实际情况匹配:
Namespace My.Resources <GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")> <DebuggerNonUserCode> <CompilerGenerated> <Global.Microsoft.VisualBasic.HideModuleNameAttribute()> Friend Module Resources <EditorBrowsable(EditorBrowsableState.Advanced)> Friend ReadOnly Property ResourceManager() As ResourceManager Get If Resources.resourceMan Is Nothing Then ' 注意此处命名空间需与项目资源文件的实际命名空间一致 Resources.resourceMan = New ResourceManager("My.Resources.Resources", GetType(Resources).Assembly) End If Return Resources.resourceMan End Get End Property <EditorBrowsable(EditorBrowsableState.Advanced)> Friend Property Culture() As CultureInfo Get Return Resources.resourceCulture End Get Set(ByVal value As CultureInfo) Resources.resourceCulture = value End Set End Property Private resourceMan As ResourceManager Private resourceCulture As CultureInfo End Module End Namespace
额外注意事项
- 确保
ResourceManager构造函数中的第一个参数(资源名称)与项目中资源文件的完整命名空间一致,否则会导致资源加载失败 - VB.NET的模块与C#的类特性不同,
HideModuleNameAttribute是VB特有的属性,用于在IntelliSense中隐藏模块名称,保留即可
内容的提问来源于stack exchange,提问作者user22579796
相关产品推荐
相关产品推荐

