Вопрос по imageresizer – Ошибки компиляции с ImageResizer 3.2.1

4

После разрешения Nuget обновить ImageResizer 3.1.5 до версии 3.2.1 мои компиляции завершаются с ошибкой (все одного типа):

Error 5 Missing compiler required member 'System.Runtime.CompilerServices.ExtensionAttribute..ctor'

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

Возврат к ImageResizer 3.1.5 также позволяет выполнить успешную компиляцию.

Мой проект - простое приложение MVC3, нацеленное на .NET4 - оба ImageResizer 3.1.5 и 3.2.1 нацелены на v2.0.50727

Любые идеи о том, как это можно исправить?

Спасибо в ожидании!

Автор рекомендует размещать запросы с этим тегом в StackOverflow;) JcMaltaDev
Это справедливо :) Будем надеяться, что он откликнется тогда. leppie
Я тоже вернулся к 3.1.5, которая работает хорошо - в конце концов, ImageResizeris довольно отличный пакет. Возможно, Nuget слишком легко обновляется до последних / лучших версий .... напоминает мне о моей склонной к сбою зависимости, чтобы постоянно высвечивать новые ядра и ПЗУ на моем телефоне;) JcMaltaDev
Я получил ту же ошибку после добавления версии 3.2.1 в один из моих проектов. В другом проекте сообщение об ошибке было:The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\MyProject\packages\ImageResizer.3.2.1\lib\ImageResizer.dll', Я просто удалил пакет и вручную загрузил старую версию. Я не понимаю, почему автор публикует версию 3.2.1, помеченную какAlpha на NuGet. Juraj Suchár
Свяжитесь с автором. leppie

Ваш Ответ

1   ответ
2

Обновление (20 июня 2012 г.): лучшее решениедля проекта откатить поддержку метода расширения, ImageResizer 3.2.2 больше не будет предлагать методы расширения, но некоторые функции будут дублированы в классах ResizeSettings и Instructions, чтобы минимизировать поломку для тех, кто уже закодировал новые альфа-API.

ImageResizer V4, скорее всего, потребует .NET 3.5 и вновь представит недостающие функции.


Обновить:пожалуйста, посмотрите этот вопрос вместо если у вас есть какие-либо решения этой проблемы-22.

Я прошу прощения за проблемы. Я все еще пытаюсь собрать данные и найти долгосрочное решение, но это то, что я имею до сих пор:

Workaround A:

В обозревателе решений разверните папку «Ссылки» в своем проекте, выберите ImageResizer и перейдите в «Свойства». Измените поле «Псевдонимы» на «глобальный»; to 'ir'.

Workaround B:

Настройте для своего проекта использование .NET 2.0, сохраните, а затем верните его обратно к использованию .NET 3.5 или .NET 4.

Workaround C:

Вручную удалите ссылку на System.Core и добавьте правильный обратно. (Обычный виновник - модернизированный проект со ссылкой на System.Core 3.0 в проекте 3.5). На ASP.NET вы можете сделать этов web.config.

Workaround D:

Вернитесь к 3.2.0, но только если вы используете C #.

Why this is happening

VisualStudio / MSBuild найти несколько определенийSystem.Runtime.CompilerServices.ExtensionAttribute в проекте во время компиляции, но вместо выбораpublic копия, определенная в System.Core, компилятор решает использоватьinternal, сборка-локальная копия, определенная в ImageResizer.dll. Затем он жалуется, потому что другие сборки не могут его достичь. Бессмысленные.

What should happen

Microsoftиспользовал эту технику Несколько раз в прошлом без проблем, и это широко задокументировано. Компиляторsupposed выбрать общедоступный экземпляр для использования в рамках всего проекта, но вместо этого он выбирает «внутренний»; копия. И это не влияет на многих разработчиков; и лишь немногие могут воспроизвести его в новом проекте.

Public vs. Internal

V2.3.0 определил ExtensionAttribute какpublic вместоinternal, Это вызвало ошибку таймера компиляции в проектах VB, но не в проектах C #. Я сразу выпустил 2.3.1 с пометкойinternal, но я вместо этого вижу проблемы с проектами на C #. Поймать-22 здесь.

It works for other people... и Microsoft! Почему я?

http://www.danielmoth.com/Blog/Using-Extension-Methods-In-Fx-20-Projects.aspx

http://www.codethinked.com/using-extension-methods-in-net-20

http://kohari.org/2008/04/04/extension-methods-in-net-20/

Использование методов расширения в .NET 2.0?

«Взломать» былодаже фигурирует в журнале MSDN.

How you can help

Мне нужно больше данных, чтобы полностью понять это. Если у вас возникла проблема, отправьте файл .zip проекта по электронной почте на адрес[email protected]и включите номера версий VisualStudio / .NET (перейдите в Visual Studio, Справка, О программе и нажмитеCopy Info, а затем вставьте его в электронное письмо).

Надеюсь, я смогу найти точные обстоятельства, которые вызывают проблему.

Update - только что нашелЭта статья что подразумевает, что единственным решением является создание нескольких версий сборки. НоMicrosoft не сделала! Что мне не хватает? Кроме того, NuGet не поддерживает версии 2.0 против версии 3.5, поэтому, если я не смогу найти решение для одной сборки, мне, возможно, придется отказаться от поддержки 2.0.

Большое спасибо за ваш быстрый ответ. Я отправил вам архив моего полного проекта по электронной почте и попробую ваши предложения выше во второй половине дня. JcMaltaDev
Исправление онлайн:downloads.imageresizing.net/…
Вау, полная поддержка там. :)
Пожалуйста, отправьте отзыв[email protected]Я хотел бы начать работу с новой версией через несколько часов.
@Sean только что получилa conclusive answer on the linked page от разработчика IronPython, у которого была похожая проблема. Методы расширения необходимо будет откатить в V3.2.2. Я нашел способ минимизировать разрыв кода путем вставки промежуточного базового класса, но людям, которые в полной мере воспользовались всеми методами расширения, возможно, придется изменить код.

Похожие вопросы