小编Sco*_*ock的帖子

如何仅使用TortoiseSVN Checkout(下拉)SVN树的部分?

我正在使用TortoiseSVN,我想将现有存储库的Checkout导入本地目录.但是,我只想删除文件树的某些部分.有没有办法可以做到这一点?

例如:

/trunk
    /project-A
    /project-B
    /project-C
Run Code Online (Sandbox Code Playgroud)

假设我只想拉下trunk,project-A和project-B.我怎么做?

svn tortoisesvn svn-checkout

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

ThreadPool.QueueUserWorkItem,带有lambda表达式和匿名方法

将两个参数传递给线程池上的新线程有时会很复杂,但看起来使用lambda表达式和匿名方法,我可以这样做:

public class TestClass
{
    public void DoWork(string s1, string s2)
    {
        Console.WriteLine(s1);
        Console.WriteLine(s2);
    }
}

try
{
    TestClass test = new TestClass();
    string s1 = "Hello";
    string s2 = "World";
    ThreadPool.QueueUserWorkItem(
        o => test.DoWork(s1, s2)
        );
}
catch (Exception ex)
{
    //exception logic
}
Run Code Online (Sandbox Code Playgroud)

现在,我肯定简化了这个例子,但这些要点是关键:

  • 传递的字符串对象是不可变的,因此是线程安全的
  • s1和s2变量在try块的范围内声明,我在将工作排队到线程池后立即退出,因此在此之后永远不会修改s1和s2变量.

这有什么问题吗?

另一种方法是创建一个实现具有3个成员的不可变类型的新类:test,s1和s2.这似乎是额外的工作,在这一点上没有任何好处.

c# lambda multithreading anonymous-methods threadpool

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

使用MEF导入WPF DataTemplate?

我把MEF看成是一个可扩展性框架,除了一点之外我几乎卖得很多:

假设我要导入ViewModel和View来显示它.我认为这样做的"正确"方法是MEF部分导出ViewModel类,以及显示ViewModel的DataTemplate.例如,假设您正在构建类似Visio的应用程序,并且您想要导入形状库.每个形状都需要在Xaml中定义的View和一个将包装一些底层Model对象的ViewModel.

这可能吗?DataTemplate的Import合约会是什么样的?如何让WPF知道导入的DataTemplate?

wpf mef datatemplate mvvm

24
推荐指数
1
解决办法
6792
查看次数

使用SSL和SslStream进行对等身份验证?

我需要在使用TCP/IP套接字进行通信的各种进程之间提供安全通信.我想要身份验证和加密.我不想重新发明轮子,而是真的想使用SSL和SslStream类以及自签名证书.我想要做的是根据本地应用程序中的已知副本验证远程进程的证书.(不需要是证书颁发机构,因为我打算手动复制证书).

为此,我希望应用程序能够在第一次运行时自动生成新的证书.除了makecert.exe之外,看起来此链接显示了一种自动生成自签名证书的方法,因此这是一个开始.

我查看了SslStream的AuthenticateAsServer和AuthenticateAsClient方法.您可以提供回电验证,因此看起来可能.但是现在我已经了解了它的细节,我真的不认为这样做是可能的.

我正朝着正确的方向前进吗?还有更好的选择吗?有没有人之前做过这样的事情(基本上是点对点SSL而不是客户端服务器)?

c# ssl sslstream ssl-certificate

17
推荐指数
1
解决办法
3万
查看次数

如何在我的抽象存储库中包装Linq2NHibernate的.Fetch和.ThenFetch?

我正在使用一个暴露IQueryable<T>这样的通用存储库:

public IQueryable<T> AllEntities
{
    get
    {
        return session.Query<T>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以像这样查询:

var results =
    (from e in repository.AllEntities
     where e.SomeProperty == "some value"
     select e).ToList();
Run Code Online (Sandbox Code Playgroud)

但是,如果T有父母和祖父母实体并且我想急切地加载它们,我必须这样做:

var results =
    (from e in repository.AllEntities
     where e.SomeProperty == "some value"
     select e)
    .Fetch(x => x.Parent)
    .ThenFetch(x => x.Grandparent)
    .ToList();
Run Code Online (Sandbox Code Playgroud)

这工作,但.Fetch.ThenFetch都Linq2Nhibernate特定扩展方法,这是造成两个问题:

  1. 我必须using NHibernate.Linq;在我的文件顶部包含一个声明.但是,在我正在进行此查询时,它应该是与实现无关的.

  2. 当我尝试对此进行单元测试时,.Fetch和我的模拟存储库提供的.ThenFetch方法相比,和方法失败IQueryable<T>了.

如何将这些内容包装在我的IRepository<T>界面内或某些通用扩展方法中?

更新:

到目前为止,我所提出的是将其添加到我的存储库界面:

IQueryable<T> EagerLoadParent<U>(IQueryable<T> query, 
    Expression<Func<T, U>> parentExpression);
IQueryable<T> …
Run Code Online (Sandbox Code Playgroud)

repository linq-to-nhibernate eager-loading

15
推荐指数
1
解决办法
2804
查看次数

如何从.NET程序打开Web浏览器?Process.Start()不起作用?

我有一个URL,我想在默认浏览器中启动它.我试过两种方法:

Process.Start("http://stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)

...以及使用ShellExecute 在另一个问题中详述的那个.

在这两种情况下我都会收到错误:Windows无法找到" http://stackoverflow.com ".确保正确键入名称,然后重试.

它不应该试图将其作为文件打开...虽然...从我的理解,它应该将其识别为URL并在默认浏览器中打开它.我错过了什么?

顺便说一下:OS = Vista,.NET = 3.5

编辑:

根据这篇MS知识库文章,由于Process.Start默认设置UseShellExecute,它应该启动默认浏览器.

编辑:

这是有用的:

System.Diagnostics.Process.Start(@"C:\Program Files\Internet Explorer\IExplore.exe", "http://stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)

不幸的是,它确实没有启动默认浏览器,如果没有在"正常"位置安装IE,它也无法正常工作.我不知道该怎么做.

更多信息:

好的,所以我得到的错误是错误号-2147467259.看看谷歌,它似乎不是很具描述性.它可能是文件关联错误或其他什么.

情节变浓:

所以我检查了应该具有http的文件关联的注册表项:

KEY_CLASSES_ROOT\http\shell\open\command\default
Run Code Online (Sandbox Code Playgroud)

这是价值:

"C:\Program Files\Mozilla Firefox\firefox.exe" -requestPending -osint -url "%1"
Run Code Online (Sandbox Code Playgroud)

那讲得通.我实际上将此字符串复制到命令提示符中并将%1替换为http://stackoverflow.com并且它工作并打开了firefox.我只是不明白为什么Process.Start没有将URL与此命令关联...

c# browser url process

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

如何在呈现之前测量WPF中TextBlock的大小?

我有一个带有两个TextBlock控件(堆叠)的WPF DataTemplate,然后是一些其他元素.由于一些复杂的布局代码,我需要知道两个TextBlock元素的高度,以便我可以绘制一些花哨的连接线,并排列其他控件等.

如果我知道进入TextBlocks的文本,我知道字体等,是否有某种方法可以计算或测量这些TextBlocks的高度而不实际呈现它们?

wpf textblock measure

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

仅在构造函数中使用私有setter是否使对象具有线程安全性?

我知道我可以创建一个不可变(即线程安全)对象,如下所示:

class CantChangeThis
{
    private readonly int value;

    public CantChangeThis(int value)
    {
        this.value = value;
    }

    public int Value { get { return this.value; } } 
}
Run Code Online (Sandbox Code Playgroud)

但是,我通常会"欺骗"并执行此操作:

class CantChangeThis
{
    public CantChangeThis(int value)
    {
        this.Value = value;
    }

    public int Value { get; private set; } 
}
Run Code Online (Sandbox Code Playgroud)

然后我开始疑惑,"为什么这个有效?" 它真的是线程安全的吗?如果我像这样使用它:

var instance = new CantChangeThis(5);
ThreadPool.QueueUserWorkItem(() => doStuff(instance));
Run Code Online (Sandbox Code Playgroud)

然后它真正做的是(我认为):

  1. 在实例的线程共享堆上分配空间
  2. 初始化堆上实例内的值
  3. 将指向该空间的指针/引用写入局部变量(特定于线程的堆栈)
  4. 将对该线程的引用作为值传递.(有趣的是我编写它的方式,引用是在一个闭包内部,它正在做我的实例正在做的事情,但让我们忽略它.)
  5. 线程进入堆并从实例读取数据.

但是,该实例值存储在共享内存中.这两个线程可能在堆上具有该内存的缓存不一致视图.什么是确保线程池线程实际上看到构造的实例而不是一些垃圾数据?在任何对象构造结束时是否存在隐式记忆障碍?

c# immutability thread-safety

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

如果我的表只有一个自动增量列,我该如何插入?

一位同事问我,如果SQL Server中有一个只有自动增量列的表,那么如何在该表中插入一个新行?

INSERT INTO MyTable() VALUES()
Run Code Online (Sandbox Code Playgroud)

......不起作用.

至于为什么......我不太确定.但我发现这个问题很有说服力.

sql-server insert auto-increment

11
推荐指数
1
解决办法
3446
查看次数

如何为"T必须是参考类型"编写单元测试?

考虑:

class MyClass<T> where T : class
{
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,where子句强制执行MyClass只是引用类型的通用的规范.

理想情况下,我应该有一个测试此规范的单元测试.但是,这个单元测试显然不起作用,但它解释了我想要实现的目标:

[Test]
[DoesNotCompile()]
public void T_must_be_a_reference_type()
{
    var test = new MyClass<int>();
}
Run Code Online (Sandbox Code Playgroud)

我可以做些什么来测试不允许代码编译实现的规范?

编辑:

更多信息:好的,所以我这样做的理由(哈哈)是我一直在遵循TDD方法,除非你有一个失败的单元测试,否则你不能编写任何代码.假设你有这个:

class MyClass<T> { }
Run Code Online (Sandbox Code Playgroud)

除非T是一个类,否则你可以写什么测试会失败?有点像default(T) == null

进一步编辑:

因此,在这个"根原因分析"后,问题是,我是靠着default(T)null这一类的消费者,以隐式方式.我能够将该消费者代码重构为另一个类,并在那里指定一个泛型类型限制(限制它class),这有效地使得代码无法编译,如果有人要删除我上面讨论的类的限制.

c# tdd unit-testing

11
推荐指数
2
解决办法
434
查看次数