小编ck.*_*ck.的帖子

.NET运行时如何找到非强名称的"程序集"?

我们有不同版本的非强名称程序集,并且在app.exe.config中没有绑定重定向/探测路径.例如,MyDll(1.0.0.0_null_neutral)和MyDll(2.0.0.0_null_neutral).相对于app.exe,这些程序集存储在LAC\MyDll_1.0.0.0_null_neutral和LAC\MyDll_2.0.0.0_null_neutral中.

我的理解是,因为MyDll程序集没有强名称,所以.NET运行时不区分不同版本的MyDll.因此,如果MyDll 1.0.0.0已经加载到内存中并且执行了针对MyDll 2.0.0.0构建的一些代码,则.NET运行时将不会加载MyDll 2.0.0.0.

但是,当我使用VS2008附加到进程并查看模块窗口时,我注意到MyDll 1.0.0.0和MyDll 2.0.0.0都是从LAC文件夹加载的.

在某处我的理解似乎存在差距.有人可以指出来吗?

编辑:感谢您的答复到目前为止.是的,我跳过那一点.可执行文件侦听AssemblyResolve事件,并通过查看LAC来处理它.

我很确定我之前看过一些MSDN文档,除非程序集具有强名称,否则会忽略所述版本.我会看看我是否可以把它挖出来.

.net strongname assembly-resolution

5
推荐指数
1
解决办法
893
查看次数

如何处理类型未知且无关紧要的通用字典?

如果'value'是一个传入的通用字典,其类型未知/无关紧要,我如何获取其条目并将它们放入类型的目标字典IDictionary<object, object>

if(type == typeof(IDictionary<,>))
{
    // this doesn't compile 
    // value is passed into the method as object and must be cast       
    IDictionary<,> sourceDictionary = (IDictionary<,>)value;

    IDictionary<object,object> targetDictionary = new Dictionary<object,object>();

    // this doesn't compile
    foreach (KeyValuePair<,> sourcePair in sourceDictionary)
    {
         targetDictionary.Insert(sourcePair.Key, sourcePair.Value);
    }

    return targetDictionary; 
}
Run Code Online (Sandbox Code Playgroud)

编辑:

感谢到目前为止的回复.

这里的问题是Copy的参数只被称为类型'object'.例如:

public void CopyCaller(object obj) 
{ 
    if(obj.GetType() == typeof(IDictionary<,>) 
         Copy(dictObj); // this doesn't compile 
} 
Run Code Online (Sandbox Code Playgroud)

c# generics dictionary

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

如何针对单元测试目的改变"今天的日期"?

我使用VS2008目标.NET 2.0框架,以防万一,不,我不能改变这个:)

DateCalculator上课了.其方法GetNextExpirationDate尝试在内部使用DateTime.Today作为基线日期来确定下一个到期时间.

在我编写单元测试时,我意识到我想测试GetNextExpirationDate不同的"今天"日期.

最好的方法是什么?以下是我考虑过的一些替代方案:

  • 使用参数公开property/overloaded方法,baselineDate仅在单元测试中使用它.在实际的客户端代码,忽略了赞成票默认方法的属性/重载方法baselineDateDateTime.Today.我不愿意这样做,因为它使得DateCalculator类的公共接口变得笨拙.
  • 创建一个baselineDate内部设置为的受保护字段DateTime.Today.测试时,DateCalculatorForTesting从构造函数派生DateCalculator并设置baslineDate.它使公共接口保持干净,但仍然不是很好 - baselineDate受到保护并且需要派生类,这两者都仅用于测试.
  • 使用扩展方法.我在添加之后尝试了这个ExtensionAttribute,然后意识到它不起作用,因为扩展方法无法访问私有/受保护的变量.我最初认为这是一个非常优雅的解决方案.:(

我有兴趣听听别人的想法.

c# datetime unit-testing

5
推荐指数
1
解决办法
742
查看次数

如何在具有一个WPF格式的WinForms应用程序中使用Caliburn Micro

我们有一个(大规模)遗留WinForms应用程序,它通过菜单项打开一个WPF表单.这个WPF表单将托管一个Infragistics网格,以及一些按钮/下拉菜单.

这个单独的WPF表单代表了向WPF迁移的新生阶段.稍后,应用程序的更多组件将转移到WPF,最终转移到整个应用程序本身.

作为迁移的一部分,我们希望使用Caliburn Micro.因此,如果我们可以从这个单独的WPF表单开始使用它会很好.

  • 有人可以提供一些关于如何使用Caliburn Micro和WPF表格的指示吗?
  • 或者也许告诉我为什么使用Caliburn Micro可能没有意义呢?

到目前为止我读过的文档涉及引导过滤器,它确保应用程序以所需的根视图模型开始,而不是上面的场景.

非常感谢!

wpf caliburn.micro

5
推荐指数
1
解决办法
3172
查看次数

是否可以从Autofac中解析一个实例,只给出一个字符串键?

使用Autofac,可以这样做吗?我没有实例的类型.

var instance = container.Resolve("someStringKey");
Run Code Online (Sandbox Code Playgroud)

从一些谷歌搜索,似乎不可能,但我想确定.

谢谢.

autofac

5
推荐指数
1
解决办法
2913
查看次数

在Python中编写一个no-op或dummy类

假设我有这样的代码:

foo = fooFactory.create()
Run Code Online (Sandbox Code Playgroud)

由于各种原因,fooFactory.create()可能无法创建实例Foo.

如果是,我想fooFactory.create()返回一个虚拟/无操作对象.这个对象应该是完全惰性的 - 无论它如何使用,它都不应该做任何事情或抛出任何异常.请注意,foo没有返回值的方法.


我考虑过以下几种选择.

首先,创建一个模拟.这样做的好处是它很容易并且完全符合我的要求.缺点是在生产代码中使用模拟会感觉很奇怪.更重要的是,我无法控制模拟库,因此它的行为可能会在某些时候发生变化并破坏我的应用程序.

其次,创建一个虚拟 NoopFoo/DummyFoo类.然后我手动实现它需要支持的方法,然后放入pass方法体.我知道它的优点永远不会破坏我的应用程序.缺点是,如果Foo将来使用其他方法,我必须知道更新NoopFoo/ DummyFoo...或我的应用程序可能会中断.

有没有比这两种更好的选择?请注意,我是Python的新手,所以如果它涉及更高级的Python功能,我会感激更多的信息.谢谢!

python

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

Process.PrivateMemorySize64在多次迭代中返回相同的值

此代码在每次迭代中返回相同的值:

var process = Process.GetCurrentProcess();
for (int i = 0; i < 10; i++)
{
    Console.WriteLine(process.PrivateMemorySize64 + Environment.NewLine);
}

// Output:
// 19853313
// 19853313
// 19853313
// 19853313
// ...
Run Code Online (Sandbox Code Playgroud)

此代码返回不同的值:

for (int i = 0; i < 10; i++)
{
    var process = Process.GetCurrentProcess();
    Console.WriteLine(process.PrivateMemorySize64 + Environment.NewLine);
}

// Output:
// 19865600
// 20336640
// 20791296
// 21245952
// ...
Run Code Online (Sandbox Code Playgroud)

Process.GetCurrentProcess()是否记录内存值的快照?

MSDN的GetCurrentProcess页面说明了这一点,但我不确定其含义是什么:

Gets a new Process component and associates it with the currently active process

c# memory process

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

有人可以解释这个Twisted单元测试吗?

我刚刚继承了Twisted Python的一些单元测试,如下所示.

虽然测试有效,但我从概念上并不理解.

鉴于以下示例,有人可以解释以下事项吗?

  • 为什么这个单元测试"返回页面"?
  • 为什么没有对reactor.start()的调用?
  • 关于这种方法的利弊的任何评论,或许我可以考虑的其他方面?

def setUp(self):
    self.listening_port = reactor.listenTCP(8118, server.Site(buildSite()))        

def tearDown(self):
    self.listening_port.stopListening()

def getUrl(self, extension=''):
    return 'http://localhost:%s/%s' % (self.listening_port.getHost().port, extension)

 def test(self):
     url = self.getUrl('foo')        
     def printResult(result):
         print result        
     page = getPage(url, method='POST').addCallback(printResult)
     return page
Run Code Online (Sandbox Code Playgroud)

python twisted.web

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