使用Roslyn解析/转换/生成代码:我的目标是太高还是太低?

(我正在尝试通过从vs生成的设置文件生成接口和包装类来解决Application.Settings / MVVM问题。) 我想做的是: 从文件中解析类声明 仅基于类的(非静态)属性生成接口声明 生成一个实现此接口的包装类,在构造函数中获取原始类的实例,并将所有属性“管道”到实例。 生成另一个直接实现接口的类。 我的问题是双重的: 我吠叫错了树吗? 我会更好地使用Code-Dom,T4,Regex(!)来实现这个目标,还是部分原因? (我不介意一些额外的工作,因为这主要是一种学习经历。) 如果罗斯林是要走的路,我应该关注哪一点? 我有点天真地希望有一些方法可以走树并吐出我想要的东西,但是我无法理解是否/如何使用SyntaxRewriter来实现它,或者是否要使用流畅的结构,多次查询源我需要的位。 如果你想评论MVVM方面,你可以,但这不是问题的主旨:)

读取C#中的USB设备序列号

有没有办法使用visual studio 2005在USB文本文件中读取USB设备序列号和数据?

如何在C#winform应用程序中执行非缓存文件写入

我正在尝试确定最坏情况下的磁盘速度,所以我编写了以下函数。 static public decimal MBytesPerSec(string volume) { string filename = volume + “\\writetest.tmp”; if (System.IO.File.Exists(filename)) System.IO.File.Delete(filename); System.IO.StreamWriter file = new System.IO.StreamWriter(filename); char[] data = new char[64000]; Stopwatch watch = new Stopwatch(); watch.Start(); int i = 0; for (; i 2000) { break; } } watch.Stop(); file.Close(); System.IO.File.Delete(volume + “\\test.txt”); decimal mbytessec = (i * 64 […]

在.net获得ssl证书

我希望从任何给定的域名SSL证书获取数据。 例如,我想放入任何网站地址,例如“ http://stackoverflow.com ”,我的代码首先会检查是否存在SSL证书。 如果确实如此,我希望它能够取出证书的失效日期。 [我正在阅读DB的Domainnames]示例: http : //www.digicert.com/help/ 我需要创建一个Web服务来检查到期日期。 我怎么能实现它? – 我查了很多不同的东西,比如RequestCertificateValidationCallback和ClientCertificates等。 我可能完全错了(因此我需要帮助)但是我会创建一个HTTPWebRequest然后以某种方式请求客户端证书和特定元素吗? 我尝试了提供@ SSL证书预取.NET的示例,但我得到了forbitten 403错误。

我应该在每个类或基类中声明一次log4net记录器吗?

声明一个记录器并在基类中调用LogManager.GetLogger似乎更干净,这样每个inheritance的人都可以使用它。 但是,在log4net网站和此博客文章中的其他博客中,它声明最好为每个类声明一个记录器,因为: 您可以通过这种方式使用记录器来隔离对象的日志记录问题,我完全建议您这样做。 这将使您能够使用log4net的分层配置机制来限制和引导各个记录器的日志输出。 这是否意味着如果我把它放在基类中,它会使该记录器成为瓶颈? 如果是这样,是否有其他解决方案或我只需要为每个类创建一个记录器?

C#中的二进制补丁生成

有没有人知道或者知道C#中的二进制补丁生成算法实现? 基本上,比较两个文件(指定旧的和新的 ),并生成一个补丁文件,可用于升级旧文件以具有与新文件相同的内容。 实现必须相对较快,并使用大文件。 它应该表现出O(n)或O(logn)运行时。 我自己的算法往往是糟糕的(快速但产生巨大的补丁)或缓慢(产生小补丁但具有O(n ^ 2)运行时)。 任何建议或实施指针都会很好。 具体来说,该实现将用于使我们拥有一个主服务器的各种大型数据文件保持服务器同步。 当主服务器数据文件发生更改时,我们还需要更新多个场外服务器。 我所做的最天真的算法,仅适用于可以保存在内存中的文件,如下所示: 从旧文件中获取前四个字节,将其称为密钥 将这些字节添加到字典中,其中key – > position ,其中position是我抓住那4个字节的位置,0开始于 跳过这四个字节中的第一个,抓取另外4个(3个重叠,1个),并以相同的方式添加到字典中 对旧文件中的所有4字节块重复步骤1-3 从新文件的开头,抓取4个字节,并尝试在字典中查找它 如果找到,通过比较两个文件中的字节,找到最长匹配(如果有) 在旧文件中对该位置的引用进行编码,并跳过新文件中的匹配块 如果未找到,则从新文件中编码1个字节,然后跳过它 对新文件的其余部分重复步骤5-8 这有点像压缩,没有窗口,因此会占用大量内存。 然而,它是相当快的,并且产生非常小的补丁,只要我尝试使代码输出最小。 更节省内存的算法使用窗口,但会产生更大的补丁文件。 我在本文中跳过了上述算法的细微差别,但如果有必要,我可以发布更多详细信息。 但是,我觉得我需要一个完全不同的算法,因此改进上述算法可能不会让我足够远。 编辑#1 :以下是对上述算法的更详细描述。 首先,组合这两个文件,这样你就有了一个大文件。 记住两个文件之间的切点。 其次,这样做可以获取4个字节并将其位置添加到整个文件中的所有内容的字典步骤中。 第三, 从新文件开始的位置开始,尝试定位4字节的现有组合,并找到最长匹配。 确保我们只考虑旧文件中的位置,或者新文件中较早的位置 。 这确保了我们可以在补丁应用程序中重用旧文件和新文件中的材料。 编辑#2 : 上述算法的源代码 您可能会收到有关证书存在问题的警告。 我不知道如何解决这个问题,因此暂时接受证书。 源使用了我库中其余部分的许多其他类型,因此文件不是全部​​,但这就是算法实现。 @lomaxx,我试图为subversion中使用的算法找到一个很好的文档,叫做xdelta,但除非你已经知道算法是如何工作的,否则我发现的文件无法告诉我需要知道的内容。 或者也许我只是密集…… 🙂 我快速浏览了你所提供的网站上的算法,遗憾的是它无法使用。 二进制diff文件中的注释说: 找到一组最佳差异需要相对于输入大小的二次时间,因此它很快就会变得无法使用。 我的需求并不是最优的,所以我正在寻找更实用的解决方案。 谢谢你的回答,如果我需要它,他会为他的工具添加一个书签。 编辑#1 […]

在C#Async CTP中`等待’线程会发生什么?

我一直在阅读关于新的async await关键字,它听起来很棒,但有一个关键问题我在目前为止看过的任何一个介绍video中都找不到答案(我也读过白皮书一会儿)。 假设我在主UI线程上的嵌套函数中调用了await 。 此时线程会发生什么? 控件是否返回消息循环,UI线程可以自由处理其他输入? 当等待的任务完成时,整个堆栈是否被推送到消息队列,这样控制将通过每个嵌套函数返回,或者是否还有其他完全发生的事情? 其次(虽然我引起了你的注意),我真的不明白为什么异步方法需要用async标记。 不能异步执行任何方法吗? 如果我想异步执行一个方法但它没有async关键字怎么办?有没有办法简单地做到这一点? 干杯。 🙂 编辑:不可否认,如果我能得到示例代码编译,我可能只是想出自己,但出于某种原因,我遇到了一个块。 我真正想知道的是,延续的持续程度是多久…是否冻结整个调用堆栈,在任务完成时恢复它,还是只返回到目前为止? 函数本身是否需要标记为异步以支持延续,或者(正如我最初所说的那样)是否继续整个调用堆栈? 如果它没有冻结整个调用堆栈,当异步等待命中非异步调用函数时会发生什么? 它阻止了吗? 难道这不会等待等待吗? 我希望你能看到我在这里缺少一些理解我希望有人可以填写,所以我可以继续学习这个。

使用Text和ProgressBars填充DataGridView

我正在创建一个multithreading应用程序,其中每个线程将在我的DataGridView显示为一行。 我希望每行中有一个ProgressBar ,表示相应的线程进度。 问题是,这可能吗? 如果是这样,怎么样?

DDD:持久化之前的实体身份

在域驱动设计中,实体的一个定义特征是它具有身份。 问题: 我无法在实例创建时为实体提供唯一标识。 一旦实体被持久化(此值由底层数据库提供),此标识仅由存储库提供。 此时我无法开始使用Guid值。 现有数据与int主键值一起存储,我无法在实例化时生成唯一的int。 我的解决方案 每个实体都有一个标识值 一旦持久化(由数据库提供),身份仅设置为真实身份 在持久性之前实例化时,标识设置为默认值 如果标识是默认标识,则实体可通过引用进行比较 如果标识不是默认标识,则实体可通过标识值进行比较 代码(所有实体的抽象基类): public abstract class Entity { private readonly IdType uniqueId; public IdType Id { get { return uniqueId; } } public Entity() { uniqueId = default(IdType); } public Entity(IdType id) { if (object.Equals(id, default(IdType))) { throw new ArgumentException(“The Id of a Domain Model […]

如何以编程方式将带有证书链的pfx导入证书存储区?

我正在尝试以编程方式在我的本地计算机的证书存储中导入X509证书(pfx / PKCS#12)。 此特定证书具有一系列证书,证书路径如下所示: 根证书CA. 组织证书CA. 组织2证书CA. 我的证书 我使用的代码如下所示: cert = new X509Certificate2(pathToCert, password); if (cert != null) { var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); store.Open(OpenFlags.ReadWrite); if (!store.Certificates.Contains(cert)) { store.Add(cert); } } 此代码确实导入了证书,但它似乎忽略了链。 如果我检查商店中的证书,则证书路径仅显示: 我的证书 但是,当我手动导入pfx时,它确实显示完整路径。 我在这里跳过一步,还是我错过了一些参数? 有人可以对此有所了解吗?