Из идеи Грега Роза я разработал этот маленький фрагмент. Обратите внимание, что я пытался придерживаться соглашений об именах.
public void SaveAllAssemblies()
{
Assembly[] asslist = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ass in asslist)
{
FileInfo fi = new FileInfo(ass.Location);
if (!fi.Extension.Equals(".exe", StringComparison.InvariantCultureIgnoreCase))
{
var assName = fi.Name;
var assConverter = new FormatterConverter();
var assInfo = new SerializationInfo(typeof(Assembly), assConverter);
var assContext = new StreamingContext();
using (var assStream = new FileStream(assName, FileMode.Create))
{
BinaryFormatter bformatter = new BinaryFormatter();
ass.GetObjectData(assInfo, assContext);
bformatter.Serialize(assStream, assInfo);
assStream.Close();
}
}
}
}
Но некоторые сборки не помечены как сериализуемые, как, например, mscorlib.dll. Следовательно, это, вероятно, только частичное решение?
Несмотря на то что можно сериализовать некоторые сборки, я предлагаю использовать FileInfo, как это предусмотрено в примере, создать список и проверить оригинальные сборки.
+1, если только для использования «assList». – Iridium
Это не имеет никакого смысла. Это также невозможно. Конечно, гораздо проще просто прочитать сборку из ресурса и сохранить ее с помощью File.WriteAllBytes(). Или просто не помещайте его в ресурс в первую очередь. –
Зачем вам нужно сохранять задницу [...] es на диск? Вот откуда они были загружены. Не могли бы вы просто выяснить пути, а затем скопировать их? – stakx