小编Ome*_*viv的帖子

System.IO.IOException:"文件存在"时使用System.IO.Path.GetTempFileName() - 解决方案?

我的一个客户在尝试使用我的产品时遇到了异常.我获得了发生的异常的callstack,其顶部是:

at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.__Error.WinIOError()
   at System.IO.Path.GetTempFileName()
   at System.Windows.Input.Cursor.LoadFromStream(Stream cursorStream)
   at System.Windows.Input.Cursor..ctor(Stream cursorStream)
Run Code Online (Sandbox Code Playgroud)

谷歌搜索这个,我发现很多博客文章说明当%TEMP%文件夹中有超过65535个临时文件时会抛出此异常,并且解决方案是简单地清除旧的临时文件.我可以要求客户这样做,但这可能只是一个临时的解决方案 - 如果他们经常运行其他一些软件,经常调用GetTempFileName,这将使问题一遍又一遍地重复出现?

我不能只是以编程方式清除%TEMP%文件夹,因为这可能会以某种方式损坏其他东西,我无法避免调用GetTempFileName(并使用我自己的临时文件夹),因为它不是我,而是WPF代码正在调用它.

这有什么永久的解决方案吗?

更新:我已经确认%TEMP%文件夹溢出日志文件的问题不是由我自己的代码引起的,而且必须由客户机器上的其他第三方应用程序引起.我也查看了实现,Cursor.LoadFromStream它肯定没有错 - 它生成一个临时文件,但然后在finally块中删除它.

.net c#

75
推荐指数
3
解决办法
4万
查看次数

如何使用VS2015预览运行xUnit单元测试?

我通过Extensions Manager添加了"xUnit.net runner for Visual Studio"v0.99.8,但是当我打开Test Explorer窗口时,它似乎没有接受我的任何单元测试.此外,Resharper 9 EAP确实是唯一支持VS2015的Resharper版本似乎还没有xUnit Test Runner的插件.

那怎么样,我可以在VS2015预览中运行xUnit单元测试吗?

unit-testing xunit xunit.net vs-2015-preview

20
推荐指数
4
解决办法
9717
查看次数

什么.NET语言可以从一个类派生自己的嵌套类?

在C#中,尝试编译以下代码会产生错误,"涉及'A'和'A.B'的循环基类依赖性"

public class A : A.B
{
    public class B { }
}
Run Code Online (Sandbox Code Playgroud)

但是,我正在通过反编译器查看第三方DLL,并看到这种结构.这怎么可能?我只能假设第三方DLL是用其他一些.Net语言编写的,但是什么语言和语法是什么?

c# circular-dependency

19
推荐指数
1
解决办法
506
查看次数

如何在Visual Studio中检测要删除的断点?

在删除断点时,EnvDTE的DebuggerEvents中似乎没有任何事件通知消费者.我还查看了Visual Studio SDK并注册了一个IDebugEventCallback2,但是当我删除断点时似乎没有触发回调.

如何在用户删除断点时收到通知?

c# vsx vspackage envdte

14
推荐指数
1
解决办法
481
查看次数

Visual Studio Debugger - 通过调试器访问编译器生成的临时变量的任何方法?

如果检查Reflector中的C#代码,您可以注意到使用模式CS $ X $ Y命名的特殊编译器生成的局部变量.这些变量是(非正式地)记录在这个答案中.

有没有办法通过Visual Studio中的Watch窗口或通过VS Debugger Extensibility API查看这些值?

我是专门询问常规的Visual Studio调试器,请不要回答这可能是通过windbg/sos/sosex - 因为那不是我正在寻找的.

c# compiler-construction debugging visual-studio

13
推荐指数
1
解决办法
618
查看次数

为什么Visual Studio Debugger不会枚举BitArray并向我显示结果?

对于以下C#代码行:

BitArray bitty = new BitArray(new[] {false, false, true, false});
Run Code Online (Sandbox Code Playgroud)

如果我在Watch窗口中评估"bitty",我看不到集合的成员.如果我评估"bitty,results",它应该枚举IEnumerable并显示结果,我会收到消息"只有可枚举的类型可以有结果视图",即使BitArray是一个IEnumerable.

为什么调试器会这样做?

CLARIFICAITON:我问的是VS Debugger Expression Evaluator中发生了什么,而不是询问如何在调试器中查看BitArray.

c# debugging visual-studio visual-studio-debugging

12
推荐指数
1
解决办法
1183
查看次数

boost :: interprocess message_queue性能 - 相当慢?

我需要一个超快速的MQ机制,其中发送器和接收器都是用C++编写的,在Windows平台上.

我目前使用RCF-C++进行IPC的实现在Windows命名管道上的时钟频率约为20,000 msg /秒.

我正在根据演示应用程序测试boost :: interprocess消息队列的性能,并且测量大约48,000条消息/秒,这是非常慢的,考虑到当我在同一台机器上编写一个简单的内存映射文件通信时(在C#使用此博客文章中的代码),我得到了大约150,000条消息/秒.

任何想法为什么我从提升message_queue获得如此缓慢的性能,以及我可以尝试改进它?

c++ performance ipc memory-mapped-files boost-interprocess

12
推荐指数
2
解决办法
1万
查看次数

冻结VS2010中断点上的所有线程

我正在使用VS2010 Beta 2来调试一些多线程代码.喜欢并行堆栈等

我有一个问题:我在一个可能被多个线程调用的方法中设置断点.一旦我达到了断点,我真的希望将重点放在触发该断点的线程上.但是,当我点击"step"时,VS经常切换到另一个线程(比如我在线程1上停止了,但同时,线程2击中了我的断点).

我知道我可以手动冻结线程窗口中的线程.有没有办法自动完成 - 基本上,一旦我遇到断点,冻结除当前线程之外的所有线程,直到我击中F-5?

debugging visual-studio-2010 visual-studio visual-studio-debugging

10
推荐指数
2
解决办法
6116
查看次数

可以使用FileShare.Delete导致UnauthorizedAccessException吗?

我正在使用以下代码打开一个文件,用于读取我之前在用户的%TEMP%文件夹中创建的文件:

new FileStream(cacheFileName, FileMode.Open, FileAccess.Read, FileShare.Read | FileShare.Delete);
Run Code Online (Sandbox Code Playgroud)

在某些用户的计算机上,这有时会抛出UnauthorizedAccessException,并显示消息"访问路径...被拒绝".我无法重现这一点.我最初的猜测是,反病毒或索引引擎正在做一些时髦的事情,但我也注意到这段代码正在使用"FileShare.Delete",我不确定应该在那里.

是否存在使用"FileShare.Delete"导致UnauthorizedAccessException的情况?

.net c# filestream unauthorizedaccessexcepti

8
推荐指数
1
解决办法
3586
查看次数

为什么Visual Studio调试器不能正确评估涉及泛型类型参数的表达式?

在以下代码中:

        private static void Main(string[] args)
        {            
            var listy = new List<DateTime> { DateTime.Now };
            MyMethod(listy);
        }

        static void MyMethod<T>(List<T> myList)
        {
            // put breakpoint here
        }
Run Code Online (Sandbox Code Playgroud)

如果我打破调试器,在"myList"上打开QuickWatch,我看到:

myList
   [0]
   Raw View
Run Code Online (Sandbox Code Playgroud)

如果我选择"[0]"节点并单击Add Watch,则添加到Watch的表达式:

(new System.Collections.Generic.Mscorlib_CollectionDebugView<System.DateTime>(myList)).Items[0]

此表达式似乎正确,但是,监视窗口显示以下错误:

'System.Collections.Generic.Mscorlib_CollectionDebugView.Mscorlib_CollectionDebugView(System.Collections.Generic.ICollection)'的最佳重载方法匹配有一些无效的参数

这似乎是调试器中的一个错误.为什么会这样?它是否记录在任何地方?

c# debugging visual-studio visual-studio-debugging

7
推荐指数
1
解决办法
3852
查看次数