我有一段非常简单的代码,在编译时会出现以下错误


错误CS0012类型“ IsLongModifier”在程序集中定义
未引用。您必须添加对程序集的引用
'Microsoft.VisualC,版本= 1.0.0.0.0,文化=中性,
PublicKeyToken = b03f5f7f11d50a3a'。


以下是代码的相关部分

grid.get_NumericalCell(rowIndex, "Bench2");


我在get_NumericalCell函数调用上模糊不清。

该方法可从以C ++ / C#实现的第三方库中获得。下面是该方法的签名

double get_NumericalCell(int rowIndex, string columnName);


如果添加对Microsoft.VisualC的引用,则错误消失。

IsLongModifier class上的参考文档在解释为什么我遇到此问题方面没有太大帮助。

有人可以解释为什么我需要引用Microsoft.VisualC.IsLongModifier-我在代码中看不到在哪里引用它。

最佳答案

第三方库可能引用了Microsoft.VisualC

get_NumericalCell()的签名在C ++中可能有一个重写,如下所示:

__gc class Grid
{
   double get_NumericalCell(int i, string columnName) {}
   double get_NumericalCell(long l, string columnName) {}
};


它将被编译为如下所示的IL:

[...] float64 get_NumericalCell(int32 i, ...) [...]
[...] float64 get_NumericalCell(int32 modopt([Microsoft.VisualC]Microsoft.VisualC.IsLongModifier) l, ...) [...]


添加了可选修饰符IsLongModifier来区分两个签名,否则它们是相同的。这将方法隐藏在C#中,但是编译器可能仍需要引用Microsoft.VisualC。您可以通过GetOptionalCustomModifiers()方法进行反射检查。

关于c# - 使用C#代码生成问题-CS0012-IsLongModifier,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38383629/

10-16 18:11