Tag: .net

在C#中编译时间reflection

我经常编写C#代码,必须使用魔术字符串来表达属性名称。 每个人都知道魔术弦的问题。 它们很难重构,它们没有编译时间检查,并且通常会导致难以诊断的问题。 然而,C#/ .NET 在整个地方使用它们来表示属性/类/方法名称。 这个问题已持续多年和多年,目前唯一可行的解​​决方案是使用表达式树,然后在运行时解析属性名称。 这可以让您获得令人满意的编译时检查,但它使代码复杂化(需要Expression类型的参数), 并且会产生运行时成本。 有没有人知道是否有一个特性考虑因为C#/ .NET添加编译时reflection来克服这个普遍存在的问题? 它似乎是一个很容易的补充,它将是一个非破坏性的变化,它将使许多开发人员受益匪浅。 typeof()运算符已经执行了编译时reflection的forms,因此看起来运算符nameof()(或类似的东西)将非常互补。 此外,有没有人知道这种function的任何潜在问题? 谢谢您的帮助。

在签名的组件中使用无符号组件

发现这些有用的链接简化了SO。 http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/ 如何修复“引用程序集没有强名称”错误? 我按照这个过程。 这似乎很容易做到。 只是想知道是否有一个点击式自动化工具可以为我这样做 – 特别是对于无符号第三方A.dll引用未签名的B.dll引用无符号C.dll的情况。

video捕获+上传+处理+流媒体返回 – .NET和C#

我们正试图找出.NET堆栈中可用的任何技术/库(甚至是第三方dll上的包装器),它们将帮助我们构建一个可以 1 – 从用户的video设备捕获图像 2 – 将其实时上传到服务器 3 – 处理video(在服务器中) – 例如:为video添加水印 4 – 将其流回用户/其他用户 优选地,步骤2和4之间的时间延迟/等待时间应该是最小的 第一个要求(捕获)似乎非常简单。 挑战在于确定一种合适的方式来进行上传,进行处理并将其流回。 任何有效的建议或想法? 最近来了acrsoss FFmpeg库,它有一个C#包装器。 FFmpeg可用于处理方面吗?

如何(以及如果)使用TPL编写单个使用者队列?

我最近听说过很多关于.NET 4.0中TPL的播客。 他们中的大多数使用任务描述后台活动,如下载图像或进行计算,以便工作不会干扰GUI线程。 我工作的大多数代码都有更多的多生产者/单一消费者风格,其中来自多个来源的工作项必须排队,然后按顺序处理。 一个示例是日志记录,其中来自多个线程的日志行被顺序化为单个队列,以便最终写入文件或数据库。 来自任何单一来源的所有记录必须保持有序,并且来自同一时刻的记录应该在最终输出中彼此“接近”。 因此,多个线程或任务或任何调用队列的任何东西: lock( _queue ) // or use a lock-free queue! { _queue.enqueue( some_work ); _queueSemaphore.Release(); } 专用工作线程处理队列: while( _queueSemaphore.WaitOne() ) { lock( _queue ) { some_work = _queue.dequeue(); } deal_with( some_work ); } 将工作线程专门用于这些任务的消费者方面似乎总是合理的。 我应该使用TPL中的某些构造来编写未来的程序吗? 哪一个? 为什么?

.NET没有可靠的异步套接字通信?

我曾经在.NET中写过一个Crawler。 为了提高其可伸缩性,我尝试利用.NET的异步API。 System.Net.HttpWebRequest具有异步API BeginGetResponse / EndGetResponse。 但是,这对API只是为了获取HTTP响应头和Stream实例,我们可以从中提取HTTP响应内容。 所以,我的策略是使用BeginGetResponse / EndGetResponse来异步获取响应Stream,然后使用BeginRead / EndRead从响应Stream实例异步获取字节。 在Crawler进行压力测试之前,一切看起来都很完美。 在压力测试下,Crawler遭受高内存使用。 我用WinDbg + SoS检查了内存,并说明System.Threading.OverlappedData实例有很多字节数组。 经过一些互联网搜索后,我从微软发现了这个KB http://support.microsoft.com/kb/947862 。 根据KB,异步I / O的数量应该具有“上限”,但它不会告诉“建议的”绑定值。 所以,在我看来,这个KB没有任何帮助。 这显然是一个.NET错误。 最后,我不得不放弃从响应Stream中异步提取字节的想法,并且只是以同步方式进行。 允许带有点网络套接字的异步IO的.NET库(Socket.BeginSend / Socket.BeginReceive / NetworkStream.BeginRead / NetworkStream.BeginWrite)必须具有其异步IO的未完成缓冲区(发送或接收)数量的上限。 网络应用程序应该具有其发布的未完成异步IO数量的上限。 编辑:添加一些问号。 任何人都有在Socket和NetworkStream上进行异步I / O的经验吗? 一般来说,生产中的爬虫是否通过同步或异步的互联网进行I / O操作?

为什么我不能安装我的服务(运行时比加载的运行时更新)?

所以我在C#中构建了一个服务,我正在尝试使用以下命令来安装它: C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727\installutil.exe MyService.exe >> installLog.txt 它失败。 当我查看installLog.txt时,我得到了这个: Microsoft (R) .NET Framework Installation utility Version 2.0.50727.3053 Copyright (c) Microsoft Corporation. All rights reserved. Exception occurred while initializing the installation: System.BadImageFormatException: Could not load file or assembly ‘file:///C:\MyService.exe’ or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and […]

将WebClient与socks代理一起使用

有没有办法在WebClient使用socks代理? 特别是它提供的DownloadString方法? 我不想使用任何第三方的东西,如privoxy,freecap,我不能使用像Chilkat那样的商业库。 我尝试使用来自http://www.mentalis.org/的东西,实际上我使用了他们的WebRequest实现,但它们似乎没有类似于WebClient的东西。

EventLog.CreateEventSource未创建自定义日志

我有一些像这样的代码: EventLog.CreateEventSource(“myApp”, “myAppLog”); EventLog.WriteEntry(“myApp”, “Test log message”, EventLogEntryType.Error); 现在,除非我遗漏了读取MSDN的内容,否则会导致在事件查看器中创建新的日志“myAppLog”,并且应该将一个条目添加到源名为“myApp”的新日志中。 但是,我无法创建新日志。 这总是只是将错误日志消息写入应用程序日志,源“myApp” – “myAppLog”无处可见。 我究竟做错了什么? 我以管理员身份登录。

C#windows appication事件:应用程序启动时CLR20r3

好的,所以我创建了ac#应用程序并将其安装在我的测试盒上。 我的应用程序在我的开发盒上工作得很好,但是当我安装在另一台机器上时,它会在Main()中崩溃。 我得到了EventType:CLR20r3 这是事件消息 Problem signature: Problem Event Name: CLR20r3 Problem Signature 01: logfileviewer.exe Problem Signature 02: 1.0.0.0 Problem Signature 03: 4f356c9c Problem Signature 04: LogFileViewer Problem Signature 05: 1.0.0.0 Problem Signature 06: 4f356c9c Problem Signature 07: 94 Problem Signature 08: 44 Problem Signature 09: System.IO.FileNotFoundException OS Version: 6.1.7601.2.1.0.256.1 Locale ID: 1033 Additional Information 1: […]

确定byte 是否是pdf文件

是否有任何方法可以检查byte []是否为pdf而不打开? 我有一些代码来显示byte []列表作为pdf缩略图。 我之前知道所有byte []都是pdf,因为我们过滤了servlet只返回这些。 现在需求已经改变,我需要恢复所有文件类型。 有没有办法检查字节[]是什么,或更具体地确定它是不是,pdf?