Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

06.09.2015, 12:32

C# Compiler- Resource angeben und nachher extrahieren

Hallo,

ich habe eine Frage, ich möchte ein eher kleines Programm machen das "Installer" herstellen kann. Also der Benutzer gibt das Programm an für das er einen Installer erstellen möchte und die weiteren Dateien die mitinstalliert werden sollen. Da dieses Programm die Installer ja auch erst kompilieren muss kann ich ja in diesem Fall nicht Visual Studio benutzen, sondern muss den C#-Compiler (csc.exe) benutzen.

Mein Problem jetzt:
Wenn ich jetzt in Visual Studio eine Resource hinzufüge und sie dann mit diesem Code entpacke:

C#-Quelltext

1
2
3
4
5
6
7
Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("<NamespaceName>.Resources.datei.txt"); // <NamespaceName> durch Namen ersetzen
FileStream fileStream = new FileStream("eineDatei.txt", FileMode.CreateNew);
 for (int i = 0; i < stream.Length; i++)
{
fileStream.WriteByte((byte)stream.ReadByte()),
}          
 fileStream.Close();


funktioniert alles. Also wenn ich jetzt auf das Programm klicke wird die Resource richtig entpackt.

ABER wenn ich jetzt das selbe mit dem C#-Compiler versuche:

Quellcode

1
csc /res:datei.txt /out:MyInstaller.exe Program.cs

dann funktioniert das nicht.

Diese Fehlermeldung kommt wenn man das Programm startet:

(Link)


Wisst ihr woran das liegt? Ich hätte da eine Idee. In Visual Studio wählt man ja die Resource aus und setzt den "Buildvorgang" von "Keine" auf "Eingebettete Resource". Wenn es daran liegt wie kann man den Buildvorgang einer Resource in der csc.exe angeben?

mfg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »GameXCraft« (06.09.2015, 13:20)


2

06.09.2015, 15:23

Hat da niemand eine Idee?

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

3

06.09.2015, 15:34

Andere Frage: warum muss dein Programm den Compiler aufrufen? Eigentlich sollte es doch reichen, wenn in einem Verzeichnis alle Dateien liegen, die im Installationsverzeichnis abgelegt werden müssen, Informationen über die im Benutzerverzeichnis anzulegenden Dateien, woraus dann die Installationsroutine generiert wird, die zusätzlich noch ein Programm zur Deinstallation bereitstellt. Ein Aufruf des Compilers ist also nicht zwingend notwendig.

Abgesehen davon: NullReferenceException
Irgendwo versuchst du auf einen Member zuzugreifen, hast aber keine Objektreferenz, sondern null. Füge einfach weitere null-Checks hinzu, mache Fehlerausgaben für den Fall, dass du mal unerwarteterweise ein null bekommst, und der Fehler sollte sich schon eher finden lassen.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

4

06.09.2015, 15:43

Ja, ich denke halt das der Fehler da liegt das die Ressourcen nicht eingebettet werden da man den Buildvorgang nicht angegeben hat, und wollte wissen wie man das im Compiler macht

Beiträge: 1 223

Wohnort: Deutschland Bayern

Beruf: Schüler

  • Private Nachricht senden

5

06.09.2015, 17:22

Wahrscheinlich musst du die .txt-Datei erst in eine .Net Resource kompilieren.

Zitat von »https://msdn.microsoft.com/en-us/library/c0tyye07.aspx«

If filename is a .NET Framework resource file created, for example, by Resgen.exe or in the development environment, it can be accessed with members in the System.Resources namespace


Die NullReferenceException kommt daher, weil GetManifestResourceStream null zurückgibt, wenn die Resource nicht vorhanden ist.

6

06.09.2015, 18:45

danke @SpieleProgrammierer: Das funktioniert! Danke für deine Hilfe

Werbeanzeige