是否可以判断装配是否已更改?
我有一个标准项目,生成一个名为MyAssembly.dll的程序集。
在一个单独的项目中,我读取了程序集并生成了哈希。
当我为程序集生成哈希值时,每次重新编译时都会不同。我已将程序集版本设置为静态,是否需要更改其他任何属性?
class Program
{
static void Main(string[] args)
{
var array = File.ReadAllBytes(@"MyAssembly.dll");
SHA256Managed algo = new SHA256Managed();
var hash = algo.ComputeHash(array);
Console.WriteLine(Convert.ToBase64String(hash));
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢
罗汉
每个程序集都有一个ModuleVersionId像哈希一样工作的 GUID。如果更改单个字符,模块 ID 就会更改,但如果恢复它,则会恢复旧的 ID。它对于比较程序集的两个版本非常有用。
var assembly = Assembly.GetEntryAssembly();
var hashId = assembly.ManifestModule.ModuleVersionId;
Console.WriteLine(hashId);
Run Code Online (Sandbox Code Playgroud)
40744db8-a8fe-4591-9b2c-d9e3e04a2f0a
Run Code Online (Sandbox Code Playgroud)
https://learn.microsoft.com/en-us/dotnet/api/system.reflection.module.moduleversionid?view=net-5.0
您可能需要使用版本号属性。哈希将不起作用,因为任何时候您重新编译一个程序集,它都会有所不同-即使代码根本没有更改。原因是每次编译时,编译器都会将guid嵌入程序集中,并将相同的guid放入相应的.pdb文件中。每次编译程序集时,guid都会更改。
这就是调试器将程序集匹配到其.pdb文件的正确版本的方式(这也是为什么必须始终将.pdb保存在发布的任何内容上的原因,并且您不能依靠能够生成pdb来匹配现有程序集的原因)
| 归档时间: |
|
| 查看次数: |
2672 次 |
| 最近记录: |