private string ExtractToFile(string id) {
var hash = _references?.GetString(id + "//hash");
if (hash == null) {
throw new Exception($"Assembly {id} is missing");
}
#if LOCALIZABLE
_first = false;
#endif
var prefix = id + "_";
var name = prefix + hash + ".dll";
var filename = Path.Combine(_temporaryDirectory, name);
if (File.Exists(filename)) {
if (_logFilename != null) {
Log("Already extracted: " + filename);
}
return filename;
}
Log("Extracting resource: " + filename);
var bytes = GetData(id);
if (bytes == null) throw new Exception($"Data for {id} is missing");
if (_temporaryFiles == null) {
_temporaryFiles = Directory.GetFiles(_temporaryDirectory, "*.dll").Select(Path.GetFileName).ToList();
}
var previous = _temporaryFiles.FirstOrDefault(x => x.StartsWith(prefix));
if (previous != null) {
Log("Removing previous version: " + previous);
try {
File.Delete(Path.Combine(_temporaryDirectory, previous));
_temporaryFiles.Remove(previous);
} catch (Exception e) {
Log("Can’t remove: " + e);
}
}
Log("Writing, " + bytes.Length + " bytes");
File.WriteAllBytes(filename, bytes);
return filename;
}