- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我想检测与上一次运行相比,我第二次运行应用程序时哪些 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/
以下哪项是实现 poco 的最佳方式? 选项 1: public class PocoOption1 { public PocoOption1(int val1,string val2) {
我有一个接受 的方法任意 POCO。然后,该方法需要能够检查 POCO 是否为 List。 .如果不是列表,则需要将其转换为列表。 例子 MyCustomMethod(object input) {
我在研究 ADO.net Entity Framework (EF 4.0) 时遇到了这个术语。我很难理解这个词。我知道 POCO 类及其在创建 PI 模型中的用途,但我不确定 POCO 代理。 有人
我在 EF4 CTP5 项目上使用 POCO 类,但在删除子属性时遇到问题。这是我的例子(希望不会太长)。 旅游类相关部分 public partial class Tour { public G
我开始使用 Poco::NotificationQueue。我注意到奇怪的行为,如果多个工作线程使用 waitDequeueNotification() 在同一个 NotificationQueue
在我的一个项目中,我有一些模型不想与 POCO 一起使用,即使用 EF 生成的类和其他一些我想使用 POCO 的模型。当我混合使用它们时,POCO 映射不起作用,我得到一个异常 System.Inva
我看到了这个问题,“POCO 是什么意思?”在网上问了很多,看到很多解释,但我还是不清楚。我知道它代表“Plain Old CLR Object”,但这并不能真正帮助我理解。 有人可以给我一些不是 P
遇到这样的情况怎么办?拥有多个 ViewModel 引用同一个 POCO 对象。 ViewModel A 更新 POCO ......现在 ViewModel B 需要以某种方式了解这一点? 最佳答案
我在 WCF 服务应用程序中有一层业务级对象和一层契约(Contract)级对象。我所指的业务层对象只是我用来保存数据的实体或 POCO 对象。我指的契约(Contract)级对象是构成我的客户看到的
向 POCO 添加方法或创建单独的类以在我们需要时更新 POCO 的值是一种好的做法吗? 例如, public class ForUser { [Required] public in
我在 Poco 中编写了一个 HTTP 客户端,它将 POST 请求发送到 HTTPServer 以下是片段 Poco::Net::HTTPClientSession s("127.0.0.1", 9
我有一个场景,其中我有一些自定义实体在绑定(bind)到其 UI 的系统(桌面)中使用。我已经转向 Entity Framework 以获得它提供的好处,但由于自定义实体与系统紧密耦合,我将继续使用自
我第一次在一个小项目中尝试使用 POCO 的 EF 4。在我的 Repository 实现中,我想提供一个 AddOrUpdate 方法,如果它是新的,它会将传入的 POCO 添加到存储库中,否则什么
我正在尝试将图像上传到远程网络服务器。我使用过 HTMLForm 和 FilePartSource。我能够成功地将图像上传到本地服务器(即 loclhost),但是当我尝试将其上传到远程服务器时,从远
我已尝试将 Entity Framework 4 和 POCO 用于我的 MVC 3 项目。可能是,我不明白这个ORM的主要思想,但问题如下: 我添加了 ADO .NET 实体数据模型并根据数据库制作
我在服务方法中遇到一种情况,其中将 POCO 分配为另一个 POCO 的子对象无法按预期工作。我正在使用 Entity Framework 4。 public void ChangeOrderCurr
我是 POCO lib 的新手,我正在做教程 pdf 上的网络示例。 当我运行 DatagramSocket 发送示例时,我总是会收到 Poco::Net::NetException。 如果我使用教程
有人可以指出 POCO、自我跟踪实体、POCO 代理之间的区别吗? 实际上,我正在使用 Entity Framework 4.0 和 POCO(存储库模式),每当我在 POCO 中进行一些更改并调用
将域对象与任何类型的持久性代码完全分离的能力使系统更具可扩展性和可维护性。当业务逻辑可以与存储代码分开测试时,测试变得更加容易。将 POCO 与 Entity Framework (EF) 一起使用绝
我有 POCO 类,我使用 NewtonSoft json 进行序列化。现在我想将其迁移到Google协议(protocol)buff。有什么方法可以迁移我的所有类(不是手动),以便我可以使用 goo
我是一名优秀的程序员,十分优秀!