C# 在这种情况下,为什么未使用的构造函数会导致程序集依赖关系?

C# 在这种情况下,为什么未使用的构造函数会导致程序集依赖关系?,c#,.net,C#,.net,我想了解关于程序集依赖性的一个微妙之处。我有一个通过自定义包装器使用SharpDX的项目,如下所示: 在这两种情况下,您的Project.dll都依赖于SharpDX.dll,这是完全正常的。在这两种情况下,SharpDX.dll将被复制到输出bin文件夹中,并在运行时使用 在第一种情况下,只要不尝试调用D3DWrapperTypeA类的构造函数,就不需要显式添加对SharpDX.dll的引用。即使尝试调用第二个构造函数,也需要引用 第二种情况也是如此:只要你从不调用GetDevice方法,你就

我想了解关于程序集依赖性的一个微妙之处。我有一个通过自定义包装器使用SharpDX的项目,如下所示:


在这两种情况下,您的
Project.dll
都依赖于
SharpDX.dll
,这是完全正常的。在这两种情况下,
SharpDX.dll
将被复制到输出
bin
文件夹中,并在运行时使用

在第一种情况下,只要不尝试调用
D3DWrapperTypeA
类的构造函数,就不需要显式添加对
SharpDX.dll
的引用。即使尝试调用第二个构造函数,也需要引用


第二种情况也是如此:只要你从不调用
GetDevice
方法,你就不需要添加一个显式引用。

你怎么知道你有依赖关系,这是非常不清楚的。但是,您将具有编译时依赖关系。运行时依赖关系将更难解释

编译时依赖关系的存在是因为C#编译器坚持它需要知道构造函数的所有重载,以便调用正确的重载。如果它不知道SharpDX.Device的任何信息,如果它无法加载SharpDX.dll的元数据,它将无法这样做


这是而不是对于返回SharpDX.Device的方法,返回类型永远不会用于确定哪个重载是正确的

这不是因为构造函数依赖项在编译时需要,而方法依赖项只在运行时需要吗?如果我是诚实的,那就猜一猜吧!
public class D3DWrapperTypeA {
    //public D3DWrapperTypeA(SharpDX.Device device) {
    //    
    //}

    public D3DWrapperTypeA(IntPtr devicePointer) {
         SharpDX.Device device = new SharpDX.Device(devicePointer);
         // etc
    }
}
public class WrapperTypeB {
    public SharpDX.Device GetDevice(int adapter) {
        // etc
    }

    public IntPtr GetDevicePointer(int adapter) {
        return GetDevice(adapter).NativePointer;
    }
}