为什么在使用不匹配的NuGet包版本进入main之前,Visual Studio会进入中断模式?

时间:2017-12-19 17:48:52

标签: c# visual-studio

我有大约90个项目的大型解决方案。 NodaTime用于许多项目,每个使用它的项目都使用2.2.0版本。

项目A使用NodaTime 2.2.0并引用我添加的新项目(项目B),该项目使用NodaTime 2.2.3。如果添加了此引用并且项目A以任何方式调用项目B中的代码,则在调试时会出现“应用程序处于中断模式”页面。即使我在进入Main之前使用F11启动应用程序,我也会得到这个。从项目A中删除项目B的使用(甚至保留参考)并使用F11运行使我离开Main的第一个支撑。

Break Mode

调用堆栈为空,调试面板中的“事件”窗口显示异常,但没有进一步的信息。

使用FUSLOGVW.exe我得到以下输出:

*** Assembly Binder Log Entry  (19/12/2017 @ 13:59:44) ***

The operation failed.
Bind result: hr = 0x80070002. The system cannot find the file specified.

...

LOG: DisplayName = NodaTime, Version=2.2.0.0, Culture=neutral, PublicKeyToken=4226afe0d9b296d1

...

LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config.
LOG: Post-policy reference: NodaTime, Version=2.2.0.0, Culture=neutral, PublicKeyToken=4226afe0d9b296d1
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///C:/home/*****/Serialisation/Serialisation/BootstrapperStartupSerialisation/bin/Debug/NodaTime.DLL.
LOG: Attempting download of new URL file:///C:/home/*****/Serialisation/Serialisation/BootstrapperStartupSerialisation/bin/Debug/NodaTime/NodaTime.DLL.
LOG: Attempting download of new URL file:///C:/home/*****/Serialisation/Serialisation/BootstrapperStartupSerialisation/bin/Debug/NodaTime.EXE.
LOG: Attempting download of new URL file:///C:/home/*****/Serialisation/Serialisation/BootstrapperStartupSerialisation/bin/Debug/NodaTime/NodaTime.EXE.
LOG: All probing URLs attempted and failed.

现在我尝试使用测试应用程序重新创建问题,但是我没有得到相同的结果。相反,我得到一个System.IO.FileLoadException运行时错误,如下所示:

System.IO.FileLoadException

最小的例子是带有Noda Time 2.2.0的控制台应用程序,代码如下:

namespace OlderRef
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(SystemClock.Instance.GetCurrentInstant());
            Console.WriteLine(Class1.GetTime());
            Console.ReadLine();
        }
    }
}

使用此代码引用使用Noda Time 2.2.3的类库:

namespace NewerRef
{
    public class Class1
    {
        public static string GetTime()
        {
            return SystemClock.Instance.GetCurrentInstant().ToString();
        }
    }
}

为什么我的生产应用程序在main之前进入break模式,因为测试应用程序在使用程序集时抛出异常?

其他信息:

像这样完成的绑定重定向不起作用:

<assemblyIdentity name="NodaTime" publicKeyToken="4226afe0d9b296d1" culture="neutral" />
<bindingRedirect oldVersion="2.2.0" newVersion="2.2.3"/>

Application是.NET Framework 4.7中的WPF应用程序

0 个答案:

没有答案