English 中文(简体)
摄像类型不是由尝试/捕获造成的。
原标题:TypeLoadException is Not Caught by try/catch

我试图为示范目的重新编号,因此,我有一个精干的眼光图书馆。

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
{ }

该类别采用2.0版<代码> 缩略式:

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() 由此可见,问题起源于......。 该网络试图将这一类别全部装上,而不是从任何任务中排出。

我减轻这一问题的唯一想法是试图在不同的应用领域装上这种类型,以便它不会干预,然后进行一些摇.的思考,看看这些接口是否与执行相符,但似乎完全和完全高技能。

简言之,为什么以“正常”的方式来处理这一问题,以及我如何在日常工作中解决类似问题?

最佳回答

在执行之前,这些类型先装上,先从使用这些类型的方法开始。 为此,你需要:

[TestMethod]
public void ShrinkingThingBreaks()
{
    try
    {
        InnerShrinkingThingBreaks();

        Assert.Fail("This should have caused a TypeLoadException");
    }
    catch
    {
        //  valid
    }
}

[MethodImpl(MethodImplAttributes.NoInlining)]
private void InnerShrinkingThingBreaks()
{
        IShrinkingThing thing = new ProxyForV2.ShrinkingThingImpl();
}
问题回答

暂无回答




相关问题
Anyone feel like passing it forward?

I m the only developer in my company, and am getting along well as an autodidact, but I know I m missing out on the education one gets from working with and having code reviewed by more senior devs. ...

NSArray s, Primitive types and Boxing Oh My!

I m pretty new to the Objective-C world and I have a long history with .net/C# so naturally I m inclined to use my C# wits. Now here s the question: I feel really inclined to create some type of ...

C# Marshal / Pinvoke CBitmap?

I cannot figure out how to marshal a C++ CBitmap to a C# Bitmap or Image class. My import looks like this: [DllImport(@"test.dll", CharSet = CharSet.Unicode)] public static extern IntPtr ...

How to Use Ghostscript DLL to convert PDF to PDF/A

How to user GhostScript DLL to convert PDF to PDF/A. I know I kind of have to call the exported function of gsdll32.dll whose name is gsapi_init_with_args, but how do i pass the right arguments? BTW, ...

Linqy no matchy

Maybe it s something I m doing wrong. I m just learning Linq because I m bored. And so far so good. I made a little program and it basically just outputs all matches (foreach) into a label control. ...

热门标签