IKVM и System.Core System.Runtime.CompilerServices.ExtensionAttribute - PullRequest
2 голосов
/ 25 марта 2009

Я использую последнюю версию IKVM для «компиляции» файла Java .jar в .NET DLL. Это все работало нормально, и теперь я пытаюсь ссылаться на DLL в проекте .NET 3.5 C #.

В моем проекте на C # я создал статический класс "StringExtensions" с методом расширения для строки.

По какой-то причине это сработало вчера, но сегодня я получаю ошибку сборки на своем классе расширений (не уверен, как это работало вчера ...).

Missing compiler required member System.Runtime.CompilerServices.ExtensionAttribute..ctor

И предупреждение о сборке:

The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\TEMP\IKVM.Runtime.dll'

Я обнаружил, что IKVM.Runtime.dll и System.Core.dll (версия 3.5) имеют одинаковый тип: «System.Runtime.CompilerServices.ExtensionAttribute»

Поскольку пространство имен одинаково, как я могу получить его для компиляции с версией ExtensionAttribute System.Core (или как я могу это исправить)?

Спасибо

Ответы [ 3 ]

2 голосов
/ 04 мая 2009

Обновление до IKVM 0.40.0.1 исправило эту проблему для меня.

1 голос
/ 26 марта 2009

Если вы нацелены на .Net 2.0, вы можете создавать методы расширения, только если определяете этот атрибут самостоятельно. Это прекрасно работает, пока вы не перейдете на .Net 3.5.

Я не знаю "IKVM", но единственное реальное исправление - попросить их удалить атрибут и цель 3.5.

0 голосов
/ 05 марта 2014

У меня такая же проблема.

В моем случае проблема была в сборке Mono.Cecil.

Миграция с локальных ссылок на nuget, когда я добавляю ссылки NHibernate, пакет автоматически добавляет эту ссылку.

Эта ссылка была удалена и снова скомпилировал мой проект.

Вам нужно понять эту реализацию, чтобы решить ваш вопрос. Одна из обеих сборок должна быть удалена.

Это изображение взято из ILSpy (http://i.stack.imgur.com/Qyd5o.png)

...