2010-02-03 5 views
0

Une idée de comment je peux faire ça?Gestion des ressources via les drapeaux de compilation

De nos jours il est fait dans Resources.Designer.vb nous avons là des lignes suivantes:

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 

Ce fichier est régénéré à chaque fois par le compilateur et donc chaque fois que je dois y ajouter ces lignes à la main.

Pouvez-vous suggérer une autre façon de le faire?

Merci.

Répondre

1

Vous pouvez exécuter un fichier de commandes qui copie (et remplace l'ancien fichier) les fichiers à l'emplacement approprié lors d'une action de préconfiguration. Vous pouvez prendre un drapeau en tant que paramètre du lot.

2

Vous pouvez utiliser la réflexion pour remplacer le ResourceManager créé par la classe Ressources:

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 

Ce n'est pas très élégant, mais il faut travailler ...

+0

Appelez quand votre programme démarre, avant que vous avez besoin toutes les ressources. Dans le Sub Main par exemple –

+0

Il ne compile pas je reçois GetType (Ressources) .Assembly -> Type de ressources attendues –

+0

J'ai copié/collé cette partie de votre code ... remplacer 'GetType (Resources)' par GetType (My.Resources.Resources) ' –

Questions connexes