Files an Release anhängen

  • VB.NET
  • .NET (FX) 4.0

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Dksksm.

    Files an Release anhängen

    Guten Tag

    Ich habe in meinem Projekt 2 xml-Files als Resourcen. Nehmen wir an abc.xml und def.xml (beide nicht leer).

    Nun möchte ich, dass bei der Veröffentlichung (ClickOnce) diese Files ebenfalls mitkopiert werden, sodass das Programm auf die beiden Files zugreifen kann.

    Gibt es da eine einfache Möglichkeit dies zu erreichen? Man findet diesbezüglich erstaunlich wenig im Web.

    Hoffe ihr könnt mir helfen.

    Gruss

    nisaria schrieb:

    Veröffentlichung
    Du hast 2 Möglichkeiten:
    1. Mach Dir ein Installer-Projekt und füge diesem die beiden Files hinzu (solch ist der Unterschied zu ClickOnce),
    2. füge diese Files Deinen Ressourcen hinzu und extrahiere sie bei Programmstart (sie wären dann nicht veränderbar)
      oder
      merke Dir, dass die Dateien bereits extrahiert sind (Test auf vorhanden, Flag in Settings).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich mache es so, wie Rod es unter Punkt 2. vorschlägt.
    Vielleicht kann man es besser lösen, ich mache es so wie folgt, allerdings ist das in C#.
    Du kanst den Code aber hier in VB.Net umwandeln.

    Spoiler anzeigen

    global definiert:

    Quellcode

    1. public static string MyAppDataPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "Firmenname");
    2. public const string MySetting = "Settings.xml";


    Quellcode

    1. //wird von anderer Routine aufgerufen um die Settings erstmalig aus der Ressource anzulegen
    2. //oder auf Benutzeraufforderung mit der Ressource zu überschreiben
    3. private static bool RenewSetting()
    4. {
    5. DirectoryInfo di = Directory.CreateDirectory(MyAppDataPath);
    6. if (!di.Exists)
    7. {
    8. log.Fatal("ReneWHelpFiles: Pfad '" + MyAppDataPath + "' konnte nicht angelegt werden!");
    9. return false;
    10. }
    11. string spath = Path.Combine(MyAppDataPath, MySetting);
    12. try
    13. {
    14. if (File.Exists(spath))
    15. {
    16. File.Delete(spath);
    17. }
    18. }
    19. catch (Exception ex)
    20. {
    21. log.Error(ex); //hier wird log4net eingesetzt
    22. return false;
    23. }
    24. try
    25. {
    26. File.WriteAllBytes(spath, Projektname.Properties.Resources.Settings);
    27. }
    28. catch (Exception ex)
    29. {
    30. log.Fatal(ex); //hier wird log4net eingesetzt
    31. return false;
    32. }
    33. return true;
    34. }


    und dort, wo das Programm die XML verwenden muss:

    Quellcode

    1. //irgend eine Routine:
    2. if (!File.Exists(spath))
    3. {
    4. File.WriteAllBytes(spath, Projektname.Properties.Resources.Settings);
    5. }