我在简单的C#控制台应用程序中观察到一种非常奇怪的行为。我无法理解为什么CLR会以这种方式工作。以下是我的代码示例:
我的主要节目:
class Program
{
static void Main(string[] args)
{
Employee emp = new Employee();
Console.WriteLine( emp.EmployeeName());
}
}
包含上述Main
方法的控制台应用程序项目引用另一个名为CustomDataObjects
的C#类库项目。如下:
namespace CustomDataObjects
{
public class Employee
{
public string GetEmployeeName()
{
return "Foo";
}
}
}
我构建了一切,它完美无缺。 Main
功能打印" Foo"在控制台上。
现在我更改了我的CustomDataObjects
项目,如下所示。我更改了GetEmployeeName
方法的签名,并引入了一个名为empName
namespace CustomDataObjects
{
public class Employee
{
public string GetEmployeeName(string empName)
{
return empName;
}
}
}
进行这些更改后,我没有重新编译我的控制台项目。在进行了上述更改后,我只是重新编译了CustomDataObjects
项目。然后,我将新构建的CustomDataObjects.dll
和CustomDataObjects.pdb
文件复制到主控制台项目的\ bin \ debug目录中。
现在我尝试从主控台项目的bin \ debug目录运行主控制台应用程序的可执行文件。令我惊讶的是它并没有崩溃。如果我没有错,在第二次运行时,CLR应该尝试查找具有旧签名的GetEmployeeName的定义,该签名没有任何参数,并且由于CustomDataObjects.dll
已经更改,因此应该观察到不匹配导致运行时崩溃。为什么不这样呢?我的控制台应用程序在.Net v4.0上运行