我试图为示范目的重新编号
TestProject --> TheLibrary [1.0]
-> ProxyForV2 -> TheLibrary [2.0]
<代码> 图书馆编码>第1版有这些相关接口:
public interface IConsistentThing
{
int ConsistentProperty { get; set; }
}
public interface IShrinkingThing
{
int RemovedProperty { get; set; }
}
<代码>第2版 图书馆代码>接口:
public interface IConsistentThing
{
int ConsistentProperty { get; set; }
}
public interface IShrinkingThing
{ }
public class ShrinkingThingImpl : IShrinkingThing
{
public int ConsistentProperty { get; set; }
}
因此,在<条码>中,如果有人试图指定一个<条码>,我预计会引发<条码>。 ProxyForV2.ShrinkingThingImpl,因为接口的第一版有一个未经第二版实施的财产。 为了证明这一点,我进行了一个单位测试,检查对象如下:
[TestMethod]
public void ShrinkingThingBreaks()
{
try
{
IShrinkingThing thing = new ProxyForV2.ShrinkingThingImpl();
Assert.Fail("This should have caused a TypeLoadException");
}
catch (TypeLoadException)
{
// valid
}
}
这里我的问题是:这一单位的测试失败了。 但并非由于我的<代码>Assert.Fail,因为我预计会这样做。 试验产出就是这样:
试验方法 测试项目:Load 试验器。 详细情况: 系统: 方法 驱逐 3. 普氧基2类财产 摘自ProxyForV2组装的ThingImpl, FCCC/SBI/2008/8。
因此,有人投掷了“TypeLoadException,尽管它的唯一位置是posible。 排在<代码>try的栏目中,附在<代码>(TypeLoadException)上,但该例外情形拒绝捕获。 此外,即使我使用一整条,单位测试也与以前一样有错误:
[TestMethod]
public void ShrinkingThingBreaks()
{
try
{
IShrinkingThing thing = new ProxyForV2.ShrinkingThingImpl();
Assert.Fail("This should have caused a TypeLoadException");
}
catch
{
// valid
}
}
正在发生什么? 显然,这是一个完全有争议的设想,但我仍然想知道正在做些什么,以便避免这一错误,或者至少如果发生的话(即,我知道最终的解决办法是确保你所有的图书馆版本都一样)。
最糟糕的是,any Access to the category at all, such as typeof (ProxyForV2.ConsistentThingImpl)
or ProxyForV2.ConsistentingImpl.SomeStaticFunction(
) 由此可见,问题起源于......。 该网络试图将这一类别全部装上,而不是从任何任务中排出。
我减轻这一问题的唯一想法是试图在不同的应用领域装上这种类型,以便它不会干预,然后进行一些摇.的思考,看看这些接口是否与执行相符,但似乎完全和完全高技能。
简言之,为什么以“正常”的方式来处理这一问题,以及我如何在日常工作中解决类似问题?