小编Cri*_*scu的帖子

EF迁移:回滚上次应用的迁移?

这看起来像一个非常常见的任务,但我找不到一个简单的方法来做到这一点.

我想撤消上次应用的迁移.我本来期待一个简单的命令,比如

PM> Update-Database -TargetMigration:"-1"
Run Code Online (Sandbox Code Playgroud)

相反,我能想出的就是:

PM> Get-Migrations

Retrieving migrations that have been applied to the target database.
201208012131302_Add-SystemCategory
201207311827468_CategoryIdIsLong
201207232247409_AutomaticMigration
201207211340509_AutomaticMigration
201207200025294_InitialCreate

PM> Update-Database -TargetMigration:"CategoryIdIsLong"
Run Code Online (Sandbox Code Playgroud)

(至少我可以只使用名称,跳过时间戳......)

有没有更简单的方法?

entity-framework database-migration entity-framework-4 ef-migrations

406
推荐指数
9
解决办法
27万
查看次数

如何在C#中为当前用户获取桌面路径?

如何在C#中为当前用户获取桌面路径?

我唯一能找到的是VB.NET-only类SpecialDirectories,它具有以下属性:

My.Computer.FileSystem.SpecialDirectories.Desktop
Run Code Online (Sandbox Code Playgroud)

我怎么能在C#中做到这一点?

c# windows filesystems directory

334
推荐指数
3
解决办法
28万
查看次数

UNIX查找找到不以特定扩展名结尾的文件名?

是否有一种简单的方法来递归查找目录层次结构中的所有文件,这些文件以扩展列表结尾?例如,所有不是*.dll或*.exe的文件

UNIX/GNU查找,功能强大,似乎没有exclude模式(或者我错过了它),而且我总是发现很难使用正则表达式来查找与特定表达式匹配的内容.

我在Windows环境中(使用大多数GNU工具的GnuWin32端口),所以我同样对Windows解决方案开放.

command-line find

195
推荐指数
4
解决办法
15万
查看次数

为什么递归调用导致StackOverflow处于不同的堆栈深度?

我试图弄清楚C#编译器如何处理尾调用.

(答案:他们不是.但是64位JIT会做TCE(尾部呼叫消除).限制适用.)

所以我使用递归调用编写了一个小测试,它打印了在StackOverflowException杀死进程之前调用它的次数.

class Program
{
    static void Main(string[] args)
    {
        Rec();
    }

    static int sz = 0;
    static Random r = new Random();
    static void Rec()
    {
        sz++;

        //uncomment for faster, more imprecise runs
        //if (sz % 100 == 0)
        {
            //some code to keep this method from being inlined
            var zz = r.Next();  
            Console.Write("{0} Random: {1}\r", sz, zz);
        }

        //uncommenting this stops TCE from happening
        //else
        //{
        //    Console.Write("{0}\r", sz); …
Run Code Online (Sandbox Code Playgroud)

.net c# stack-overflow jit tail-recursion

73
推荐指数
1
解决办法
2890
查看次数

.NET的Visual Studio调试器提示和技巧

我已经和VS的调试器一起工作多年了,但我偶尔会遇到一个我以前从未注意过的功能,并且想想"该死的!我怎么能错过它?它非常有用!"

[免责声明:这些提示适用于VS 2005中的C#项目,不保证VS或其他语言的旧版本]

跟踪对象实例

使用给定类的多个实例?你怎么能分开他们?在垃圾收集前编程时,很容易跟踪引用 - 只需查看内存地址即可.使用.NET,你不能这样做 - 对象可以移动.幸运的是,通过手表视图,您可以右键单击手表并选择"创建对象ID".

手表查看http://img403.imageshack.us/img403/461/52518188cq3.jpg

这会在实例的值之后附加{1#},{2#}等,从而有效地为实例提供唯一标签.它看起来像这样:

编号实例http://img383.imageshack.us/img383/7351/11732685bl8.jpg

标签在该对象的生命周期内保持不变.

观察变量的有意义值

默认情况下,监视变量的值是它的类型.如果你想看到它的字段,你必须扩展它,如果有很多字段或它们做了一些复杂的事情,这可能需要很长时间(甚至超时!).

但是,某些预定义类型显示更有意义的信息:

  • 字符串显示其实际内容
  • 列表和词典显示其元素数等.

有意义的信息http://img205.imageshack.us/img205/4808/37220487md1.jpg

拥有我自己的类型不是很好吗?

嗯...

...使用.NET Reflector的一些高质量时间显示了使用DebuggerDisplay我的自定义类型上的属性可以轻松实现这一点:

[System.Diagnostics.DebuggerDisplay("Employee: '{Name}'")]
public class Employee {
    public string Name { get { ... } }
    ...
}
Run Code Online (Sandbox Code Playgroud)

......重新运行,......

ta da!http://img60.imageshack.us/img60/926/79816018ha1.jpg

这里有关于这个主题的更多信息:MSDN

打破所有例外

......甚至是代码处理的!我知道,自从我出生以来,我就是一个不知道这一点的人,但无论如何它都在这里 - 也许有一天这会对某人有所帮助:

每次抛出异常时,您都可以强制调试进程进入调试模式.曾经花了几个小时寻找一个只是为了遇到这样的代码吗?

try {
    runStrangeContraption();
} catch(Exception ex) {
    /* TODO: Will handle this error later */
}
Run Code Online (Sandbox Code Playgroud)

在这些情况下捕获所有异常非常方便.这可以从Debug> Exceptions ...(Ctrl-Alt-E)启用.勾选"Thrown"列中的框,了解您需要的每种类型的例外情况.


那对我来说是一些前额拍打的时刻.你愿意分享你的吗?

.net debugging hidden-features visual-studio

70
推荐指数
7
解决办法
8854
查看次数

何时使用'嵌套诊断上下文'(NDC)?

使用log4net,我已经看到了使用称为NDC的每个线程堆栈的上下文标签的可能性.

通过指定%x%ndc格式参数,在此堆栈上推送的标签将显示在PatternLayout中.

用法如下:

ILog log = log4net.LogManager.GetLogger(...) ;

//pattern layout format: "[%ndc] - %message%newline"

log.Info("message 1"); 
using(log4net.NDC.Push("context")
{
    using(log4net.NDC.Push("inner_context")
    {
      log.Info("message 2"); 
    }
    log.Info("message 3"); 
}
log.Info("message 4"); 
Run Code Online (Sandbox Code Playgroud)

输出类似于:

null - message 1
context inner_context - message 2
context - message 3
null - message 4
Run Code Online (Sandbox Code Playgroud)

在使用log4net的编程经验中,您何时发现此功能有用?

.net logging log4net ndc

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

为什么抽象类的构造函数应该受到保护而不是公开?

ReSharper建议改变类中public构造函数的可访问性,但它没有说明这背后的基本原理.abstractprotected

你能解开一些光吗?

.net c# oop inheritance access-modifiers

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

Python - 元组分配是否有"不关心"的符号?

给定一个字符串"VAR = value"我想在第一个 '='符号(<value>可能包含更多'='符号)中将其拆分(仅),如下所示:

var, sep, value = "VAR=value".partition('=')
Run Code Online (Sandbox Code Playgroud)

有没有办法不声明变量'sep'?像这样(只是编写语法):

var, -, value = "VAR=value".partition('=')
Run Code Online (Sandbox Code Playgroud)

为了完整起见,我的目标是Python v 2.6

python syntax

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

Visual Studio - 管理许多打开文件的工作的提示

你怎么看待VS让你在几分钟之前找到一个你用过多个打开标签的标签?如何不断拖动标签以保持您使用的标签紧密相连?

哦,你也觉得AARGH?然后继续阅读.

我在一个软件上工作,有几十个项目和数百个文件.很容易让标签栏填满 - 就像调试时一样,可以打开很多文件,其中大部分只是样板文件,或者对于手头的任务并不是很有趣.
这使得与标签栏"关闭" 相关的少数文件,或通过略过可见标签找到的痛苦.

有一些解决方案,其中一些比其他更广为人知.这是我的前三名:

III.如果您可以准确记住文件名(或至少是第一个字母),则此方法有效:使用"查找框":

type: Ctrl-D >of yourFileName
Run Code Online (Sandbox Code Playgroud)

在键入文件名时,您将获得解决方案中文件名的自动完成功能.更多细节在这里.

II.最明显的一个:使用按字母顺序排列的选项卡栏右侧的"活动文件"下拉列表.
鲜为人知的事实:Ctrl-Alt-DownArrow用来打开那个下拉菜单,然后开始输入文件名.您可以获得可视化可用选项的额外好处.[信息无耻地从这里被盗]

I. <drum roll/>这是我个人的最爱,它基于VS 2005/2008的无证版功能.激活时,它只做一件简单的事情:单击选项卡将其移动到窗口的最左侧.这个基本操作通常让我在前3到5个选项卡中找到我正在寻找的选项卡.它是这样的:

删除了死亡的ImageShack链接 - 示例动画

为了启用此功能,您必须亲自使用Windows注册表.
强制编辑 - 注册表自担风险警告:
编辑注册表可能会使您的网卡丢弃数据包.你被警告了.

将此密钥添加到VS 2005的注册表:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0]
"UseMRUDocOrdering"=dword:00000001
Run Code Online (Sandbox Code Playgroud)

或者这个VS 2008:

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0]
"UseMRUDocOrdering"=dword:00000001
Run Code Online (Sandbox Code Playgroud)

你甚至不必重新启动VS才能看到它的工作![从这里抄袭]
现在继续,试一试!

更新: 此技巧在VS2010 Pro中不再有效:​​(


这结束了我的部分.现在轮到你分享你如何处理标签狩猎了!

tabs visual-studio

30
推荐指数
5
解决办法
2万
查看次数

Ruby中的'通过引用传递参数'?

在Ruby中,是否可以通过引用传递带有值类型语义的参数(例如Fixnum)?我正在寻找类似于C#的' ref '关键字的东西.

例:

def func(x) 
    x += 1
end

a = 5
func(a)  #this should be something like func(ref a)
puts a   #should read '6'
Run Code Online (Sandbox Code Playgroud)

顺便说一句.我知道我可以使用:

a = func(a)
Run Code Online (Sandbox Code Playgroud)

ruby parameter-passing pass-by-reference

26
推荐指数
4
解决办法
2万
查看次数