我想了解有关程序集依赖项的一个微妙之处。我有一个通过自定义包装器使用SharpDX的项目,如下所示:
SharpDX.dll
在Wrapper.dll中是一种类型,例如:
public class D3DWrapperTypeA {
//public D3DWrapperTypeA(SharpDX.Device device) {
//
//}
public D3DWrapperTypeA(IntPtr devicePointer) {
SharpDX.Device device = new SharpDX.Device(devicePointer);
// etc
}
}
在此类中,如果我取消注释注释的构造函数的注释,则Project.dll必须引用SharpDX.dll,即使它不使用构造函数也是如此。
但是,我还有另一种包装类型,如下所示:
public class WrapperTypeB {
public SharpDX.Device GetDevice(int adapter) {
// etc
}
public IntPtr GetDevicePointer(int adapter) {
return GetDevice(adapter).NativePointer;
}
}
在这里,只要我实际上不使用返回SharpDX对象的GetDevice方法,Project.dll就不需要引用SharpDX.dll。
为什么即使使用了SharpDX类型参数的未使用构造函数也会导致对SharpDX的依赖,而未使用返回SharpDX类型参数的未使用方法的构造函数呢?
最佳答案
尚不清楚您如何知道自己有依赖关系。但是,您将具有编译时的依赖性。运行时依赖性将很难解释。
之所以存在编译时依赖性,是因为C#编译器坚持认为它需要知道构造函数的所有重载,以便可以调用正确的重载。如果它对SharpDX.Device一无所知,它将无法做到这一点,如果它无法加载SharpDX.dll的元数据。
在返回SharpDX.Device的方法的情况下,这是而不是,返回类型从不用于确定哪个重载是正确的。
关于c# - 为什么在这种情况下未使用的构造函数会导致程序集依赖关系?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18491741/