gpt4 book ai didi

C# 检测在运行时第二次运行应用程序期间更改了哪些 C# (.cs/poco) 文件

转载 作者:太空宇宙 更新时间:2023-11-03 12:02:35 24 4
gpt4 key购买 nike

我想检测与上一次运行相比,我第二次运行应用程序时哪些 C# 文件 (pocos) 发生了变化。我所说的更改是指对文件的任何更改,例如更改方法内的逻辑或添加/删除属性/字段。您可以假设文件名保持不变。检查 git logs/changes 超出了这个问题的范围。

我能想到的潜在解决方案是在数据库中保留哈希记录。我可以计算文件的哈希值或计算 poco 对象实例的哈希值。计算文件的哈希值会给我一个唯一的哈希值,但在运行时,所有 .cs 文件都会编译成 dll,因此可能无法在单个项目中执行此操作,我需要先运行一个单独的项目填充哈希的主要项目(不理想)。或者我可以对对象实例进行哈希处理,但我认为这不会考虑 poco 的方法/函数中的代码更改,因为它只是对属性/字段值进行哈希处理(如果我错了,请在此处纠正我)。

我想知道是否有直接的方法来做到这一点?可能是一个解决方案,我可以在运行时获取文件的唯一哈希值,将其保存到数据库以供第二次运行。在第二次运行时,将我刚刚生成的新哈希值与数据库中的值进行比较,并对所做的任何更改进行操作。

所以在这一点上,我不确定有什么可能的方法可以解决这个问题。有关如何解决此问题的任何指示或建议都会有所帮助。


问题背景:

在 CQRS 系统中,我们有投影,对 View /投影的任何更改都需要将事件重播到投影上以重建 View 。如果事件数据库很大,这可能会很昂贵。因此,我构建了一些工具,允许为开发和生产中的应用程序启动重建所有 View /投影,能够选择性地重新创建一些 View 以提高在冲刺期间发生变化的速度。要有选择地重新创建 View ,我们必须找出哪些 View 在冲刺期间发生了变化,并将其作为环境变量传递,以便只重建正确的 View 以加快应用程序的启动时间。这是一个手动过程,很容易发生人为错误,我们可能会错过可能已更改的 View 。我想通过检查已更改的文件并使用此更改列表来重建 View ,从而在应用程序启动时的冲刺期间自动检测已更改的 View 。

提前感谢所有帮助:)

最佳答案

使用源代码控制系统。今天 Git 是大多数人使用的。 Visual Studio 支持 Git(请参阅 Version Control in Visual Studio)。我个人更喜欢使用 Git Extensions for Visual Studio .

这些扩展有一个允许比较提交的浏览器。所有代码更改都突出显示。旧代码为红色,新代码为绿色。


更新

您可以从类型中的属性创建哈希码,以查看它们是否已更改:

public static int GetPropertyHash(Type type) {
int hash = 237463;
foreach (PropertyInfo prop in type.GetProperties()) {
unchecked {
hash = hash * 17 + prop.Name.GetHashCode();
hash = hash * 17 + prop.PropertyType.FullName.GetHashCode();
}
}
return hash;
}

如果这还不够,则创建一个单独的应用程序来计算相关代码文件的哈希值并将结果作为 C# 代码文件存储到该项目中。或者使用项目内部的 T4 模板生成此文件。生成的文件可能是这样的:

public static class SouceCode
{
public static Dictionary<string, int> Hash => new Dictionary<string, int> {
["MyView1.cs"] = 1382683,
["MyPoco.cs"] = -598674579,
};
}

关于C# 检测在运行时第二次运行应用程序期间更改了哪些 C# (.cs/poco) 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56429921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com