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!
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:
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)
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.
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
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 GetManifestResourceStreamnull zurückgibt, wenn die Resource nicht vorhanden ist.