Greg Ros のアイデアから、この小さなスニペットを開発しました。命名規則に固執しようとしたことに注意してください。
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 を使用し、リストを生成して元の
アセンブリを検査することをお勧めします。