Давайте попробуем написать это формально:
f(y,m,d) = 365*y+ y/4 - y/100 + y/400 + (153*m- 457)/5 + d - 306
date_diff(y1,m1,d1,y2,m2,d2) = f(y1,m1,d1) - f(y2,m2,d2)
Упрощение:
date_diff = (y1-y2)*(365+1/4-1/100+1/400) + (m1-m2)*30.6 + (d1-d2)
И это имеет смысл, потому что:
Вы используете чей-то dll (или Ваше собственное), который реализовал этот атрибут (с точно тем же именем) самим как средство использования некоторых функций c# 3.0 на пред время выполнения.Net 3.5? (Общий прием)
Это - вероятная причина. Так как это использует корректный (MS один в GAC), это не проблема, хотя необходимо выследить другой и удалить его.
Подробно останавливаясь на (корректном) ответе ShuggyCoUk
Правдиво это не имеет значения, какая версия атрибута используется (GAC, 3-я часть, и т.д....). Все, что имеет значение, является компилятором C#/VB, может найти некоторый атрибут с корректным именем. Атрибут не служит никакой функциональной цели в коде. Это существует просто для сообщения Компилятора "эй, это - дополнительный метод".
можно безопасно проигнорировать это предупреждение.
Компилятор не знает который Система. Время выполнения. CompilerServices. ExtensionAttribute
, Таким образом, это использует определение от c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll'
А .dll Вы, использует, мог бы иметь тот же extenstion.