我正在使用TortoiseSVN,我想将现有存储库的Checkout导入本地目录.但是,我只想删除文件树的某些部分.有没有办法可以做到这一点?
例如:
/trunk
/project-A
/project-B
/project-C
Run Code Online (Sandbox Code Playgroud)
假设我只想拉下trunk,project-A和project-B.我怎么做?
将两个参数传递给线程池上的新线程有时会很复杂,但看起来使用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)
现在,我肯定简化了这个例子,但这些要点是关键:
这有什么问题吗?
另一种方法是创建一个实现具有3个成员的不可变类型的新类:test,s1和s2.这似乎是额外的工作,在这一点上没有任何好处.
我把MEF看成是一个可扩展性框架,除了一点之外我几乎卖得很多:
假设我要导入ViewModel和View来显示它.我认为这样做的"正确"方法是MEF部分导出ViewModel类,以及显示ViewModel的DataTemplate.例如,假设您正在构建类似Visio的应用程序,并且您想要导入形状库.每个形状都需要在Xaml中定义的View和一个将包装一些底层Model对象的ViewModel.
这可能吗?DataTemplate的Import合约会是什么样的?如何让WPF知道导入的DataTemplate?
我需要在使用TCP/IP套接字进行通信的各种进程之间提供安全通信.我想要身份验证和加密.我不想重新发明轮子,而是真的想使用SSL和SslStream类以及自签名证书.我想要做的是根据本地应用程序中的已知副本验证远程进程的证书.(不需要是证书颁发机构,因为我打算手动复制证书).
为此,我希望应用程序能够在第一次运行时自动生成新的证书.除了makecert.exe之外,看起来此链接显示了一种自动生成自签名证书的方法,因此这是一个开始.
我查看了SslStream的AuthenticateAsServer和AuthenticateAsClient方法.您可以提供回电验证,因此看起来可能.但是现在我已经了解了它的细节,我真的不认为这样做是可能的.
我正朝着正确的方向前进吗?还有更好的选择吗?有没有人之前做过这样的事情(基本上是点对点SSL而不是客户端服务器)?
我正在使用一个暴露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特定扩展方法,这是造成两个问题:
我必须using NHibernate.Linq;在我的文件顶部包含一个声明.但是,在我正在进行此查询时,它应该是与实现无关的.
当我尝试对此进行单元测试时,.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) 我有一个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与此命令关联...
我有一个带有两个TextBlock控件(堆叠)的WPF DataTemplate,然后是一些其他元素.由于一些复杂的布局代码,我需要知道两个TextBlock元素的高度,以便我可以绘制一些花哨的连接线,并排列其他控件等.
如果我知道进入TextBlocks的文本,我知道字体等,是否有某种方法可以计算或测量这些TextBlocks的高度而不实际呈现它们?
我知道我可以创建一个不可变(即线程安全)对象,如下所示:
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)
然后它真正做的是(我认为):
但是,该实例值存储在共享内存中.这两个线程可能在堆上具有该内存的缓存不一致视图.什么是确保线程池线程实际上看到构造的实例而不是一些垃圾数据?在任何对象构造结束时是否存在隐式记忆障碍?
一位同事问我,如果SQL Server中有一个只有自动增量列的表,那么如何在该表中插入一个新行?
INSERT INTO MyTable() VALUES()
Run Code Online (Sandbox Code Playgroud)
......不起作用.
至于为什么......我不太确定.但我发现这个问题很有说服力.
考虑:
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# ×5
wpf ×2
browser ×1
datatemplate ×1
immutability ×1
insert ×1
lambda ×1
measure ×1
mef ×1
mvvm ×1
process ×1
repository ×1
sql-server ×1
ssl ×1
sslstream ×1
svn ×1
svn-checkout ×1
tdd ×1
textblock ×1
threadpool ×1
tortoisesvn ×1
unit-testing ×1
url ×1