我们有不同版本的非强名称程序集,并且在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文档,除非程序集具有强名称,否则会忽略所述版本.我会看看我是否可以把它挖出来.
如果'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) 我使用VS2008目标.NET 2.0框架,以防万一,不,我不能改变这个:)
我DateCalculator上课了.其方法GetNextExpirationDate尝试在内部使用DateTime.Today作为基线日期来确定下一个到期时间.
在我编写单元测试时,我意识到我想测试GetNextExpirationDate不同的"今天"日期.
最好的方法是什么?以下是我考虑过的一些替代方案:
baselineDate仅在单元测试中使用它.在实际的客户端代码,忽略了赞成票默认方法的属性/重载方法baselineDate来DateTime.Today.我不愿意这样做,因为它使得DateCalculator类的公共接口变得笨拙.baselineDate内部设置为的受保护字段DateTime.Today.测试时,DateCalculatorForTesting从构造函数派生DateCalculator并设置baslineDate.它使公共接口保持干净,但仍然不是很好 - baselineDate受到保护并且需要派生类,这两者都仅用于测试.ExtensionAttribute,然后意识到它不起作用,因为扩展方法无法访问私有/受保护的变量.我最初认为这是一个非常优雅的解决方案.:(我有兴趣听听别人的想法.
我们有一个(大规模)遗留WinForms应用程序,它通过菜单项打开一个WPF表单.这个WPF表单将托管一个Infragistics网格,以及一些按钮/下拉菜单.
这个单独的WPF表单代表了向WPF迁移的新生阶段.稍后,应用程序的更多组件将转移到WPF,最终转移到整个应用程序本身.
作为迁移的一部分,我们希望使用Caliburn Micro.因此,如果我们可以从这个单独的WPF表单开始使用它会很好.
到目前为止我读过的文档涉及引导过滤器,它确保应用程序以所需的根视图模型开始,而不是上面的场景.
非常感谢!
使用Autofac,可以这样做吗?我没有实例的类型.
var instance = container.Resolve("someStringKey");
Run Code Online (Sandbox Code Playgroud)
从一些谷歌搜索,似乎不可能,但我想确定.
谢谢.
假设我有这样的代码:
foo = fooFactory.create()
Run Code Online (Sandbox Code Playgroud)
由于各种原因,fooFactory.create()可能无法创建实例Foo.
如果是,我想fooFactory.create()返回一个虚拟/无操作对象.这个对象应该是完全惰性的 - 无论它如何使用,它都不应该做任何事情或抛出任何异常.请注意,foo没有返回值的方法.
我考虑过以下几种选择.
首先,创建一个模拟.这样做的好处是它很容易并且完全符合我的要求.缺点是在生产代码中使用模拟会感觉很奇怪.更重要的是,我无法控制模拟库,因此它的行为可能会在某些时候发生变化并破坏我的应用程序.
其次,创建一个虚拟 NoopFoo/DummyFoo类.然后我手动实现它需要支持的方法,然后放入pass方法体.我知道它的优点永远不会破坏我的应用程序.缺点是,如果Foo将来使用其他方法,我必须知道更新NoopFoo/ DummyFoo...或我的应用程序可能会中断.
有没有比这两种更好的选择?请注意,我是Python的新手,所以如果它涉及更高级的Python功能,我会感激更多的信息.谢谢!
此代码在每次迭代中返回相同的值:
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
我刚刚继承了Twisted Python的一些单元测试,如下所示.
虽然测试有效,但我从概念上并不理解.
鉴于以下示例,有人可以解释以下事项吗?
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) c# ×3
python ×2
.net ×1
autofac ×1
datetime ×1
dictionary ×1
generics ×1
memory ×1
process ×1
strongname ×1
twisted.web ×1
unit-testing ×1
wpf ×1