通过编译标志管理资源

时间:2010-02-03 12:13:36

标签: .net vb.net

知道我该怎么做吗?

现在几天在Resources.Designer.vb完成,我们有以下几行:

Friend ReadOnly Property ResourceManager() As Global.System.Resources.ResourceManager
            Get
                   If Object.ReferenceEquals(resourceMan, Nothing) Then
                        #If WizardVersion Then
                            Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Wizard.Resources", GetType(Resources).Assembly)
                        #ElseIf CalculatorVersion Then
                            Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Calculator.Resources", GetType(Resources).Assembly)
                        #ElseIf ViewerVersion Then
                            Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Viewer.Resources", GetType(Resources).Assembly)
                        #End If
                    resourceMan = temp
                End If
                Return resourceMan
            End Get
        End Property 

每次通过编译器重新生成该文件,因此每次我必须手动添加那些行。

你能建议另一种方法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以使用反射来覆盖Resources类创建的ResourceManager:

Sub InitResources()
    #If WizardVersion Then
        Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Wizard.Resources", GetType(Resources).Assembly)
    #ElseIf CalculatorVersion Then
        Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Calculator.Resources", GetType(Resources).Assembly)
    #ElseIf ViewerVersion Then
        Dim temp As Global.System.Resources.ResourceManager = New Global.System.Resources.ResourceManager("Viewer.Resources", GetType(Resources).Assembly)
    #End If

    Dim resManField As System.Reflection.FieldInfo = GetType(My.Resources.Resources).GetField("resourceMan", Reflection.BindingFlags.Static Or Reflection.BindingFlags.NonPublic)
    resManField.SetValue(Nothing, temp)

End Sub

那不是很优雅,但应该有效......

答案 1 :(得分:1)

您可以运行批处理文件,将文件复制(并覆盖旧文件)到预构建操作的适当位置。您可以将标志作为批次的参数。