以前は自分のプログラムにファイルを埋め込んで完全に成功していましたが、コード行を 2 番目のプログラムに移したところ、がっかりしました。
抽出のコードは次のとおりです。
private static void Extract(string nameSpace, string outDirectory, string internalFilePath, string resourceName)
{
Assembly assembly = Assembly.GetCallingAssembly();
using (Stream s = assembly.GetManifestResourceStream(nameSpace + "." + (internalFilePath == "" ? "" : internalFilePath + ".") + resourceName))
using (BinaryReader r = new BinaryReader(s))
using (FileStream fs = new FileStream(outDirectory + "\\" + resourceName, FileMode.OpenOrCreate))
using (BinaryWriter w = new BinaryWriter(fs))
w.Write(r.ReadBytes((int)s.Length));
}
NewFolder1 という名前のフォルダーに配置したいプログラムを抽出するには、次のコードを入力します。
Type myType = typeof(NewProgram);
var n = myType.Namespace.ToString();
String TempFileLoc = System.Environment.GetEnvironmentVariable("TEMP");
Extract(n, TempFileLoc, "NewFolder1", "Extract1.exe");
エラーなしでプログラムをコンパイルできますが、プログラムが抽出する行に到達すると、次のようになります。
Extract(n, TempFileLoc, "NewFolder1", "Extract1.exe");
プログラムがクラッシュし、「値を null にすることはできません」というエラーが表示されます。
はい、System.IOとSystem.Reflectionを含めました