private string ExtractUnmanaged(string id) {
var size = _references?.GetString(id + "//size");
if (size == null) {
throw new Exception($"Assembly {id} is missing");
}
var sizeLong = long.Parse(size, CultureInfo.InvariantCulture);
var name = id + ".dll";
var filename = Path.Combine(_temporaryDirectory, name);
var existing = new FileInfo(filename);
if (existing.Exists && existing.Length == sizeLong) {
// BUG: never happens?
if (_logFilename != null) {
Log("Already extracted: " + filename);
}
return filename;
}
var bytes = GetData(id);
if (bytes == null) throw new Exception($"Data for {id} is missing");
Log("Writing, " + bytes.Length + " bytes (saved: " + sizeLong + ")");
File.WriteAllBytes(filename, bytes);
return filename;
}