2017-08-10 65 views
3

我试图找出程序集已更改(即使版本号相同)。如何获得C#.NET编译器程序集GUID

现在最好的努力是发现它已被重新编译,因此想使用与MSBuild使用的相同的项目,我相信它是存储在元数据中的文件GUID? (按照The .NET File Format

有没有什么办法可以访问这个信息,而不需要重新发明轮子,并下降到文件字节?

+1

有用的https://stackoverflow.com/questions/502303/how-do-i-programmatically-get-the-guid-of-an-application-in-net2-0? – DavidG

+0

嗯,不,[Guid]没用。 MVID可能很有用,编译器在创建程序集时必须生成一个新的。这一切都没有告诉你,程序集实际上已经改变,只是文件被重新创建。文件日期已经告诉你的东西。 –

+0

@文件日期的@HansPassant问题是,如果你使用一个不保存修改日期的哑文件,那么你就失去了这个事实,而不是世界上最大的问题,但如果我不能使用同样的事情MSBuild使用。 –

回答

0

尝试存储程序集的变量最后修改日期并检查它。 这里是如何得到一个组装的最后修改日期:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
System.IO.FileInfo fileInfo = new System.IO.FileInfo(assembly.Location); 
DateTime lastModified = fileInfo.LastWriteTime; 
+0

我可能不得不回到上次修改日期。 –

1

嗯,看来组件没有关联的GUID。 模块,类,方法,字段都有GUID,程序集中的“GUID”流是存储它们的地方。

如果您想访问程序集的元信息(例如,其主模块的GUID),Mono.Cecil可能是一个不错的选择。

但相反,您可以通过使用哈希函数来计算校验和或者只是查看修改日期来实现该目的。 System.IO.FilesystemWatcher能够通知你,如果你不想间接访问文件。

+0

哇谢谢! Mono.Cecil看起来有趣,会检查出来。 –

相关问题