如何将程序集保存到文件中?我的意思是不是动态加载的程序集,而是普通的内存中的程序集。
Assembly[] asslist = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ass1 in asslist)
{
// How to save?
}
当应用程序从资源中加载一些引用的程序集时,可能会出现这种情况。我想把它们保存到磁盘上。
从资源中提取程序集是不可能的,因为它们被加密了。
如何将程序集保存到文件中?我的意思是不是动态加载的程序集,而是普通的内存中的程序集。
Assembly[] asslist = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly ass1 in asslist)
{
// How to save?
}
当应用程序从资源中加载一些引用的程序集时,可能会出现这种情况。我想把它们保存到磁盘上。
从资源中提取程序集是不可能的,因为它们被加密了。
从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生成列表并检查原始程序集。
Assembly ass = ...;
return ass.Location;
as
是一个关键字,不能用作标识符。我建议使用ass
。