ImageResizer 3.2.1的编译错误

时间:2012-06-12 04:26:14

标签: imageresizer

允许Nuget将ImageResizer 3.1.5更新为版本3.2.1后,我的编译失败并出现多个错误(所有相同类型):

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

显然这是程序集版本不匹配的结果。删除项目中的所有ImageResizer引用允许无错编译。

恢复到ImageResizer 3.1.5也允许成功编译。

我的项目是一个针对.NET4的简单MVC3应用程序 - ImageResizer 3.1.5和3.2.1都针对v2.0.50727

关于如何解决这个问题的任何想法?

感谢您的期待!

1 个答案:

答案 0 :(得分:2)

更新(2012年6月20日):最佳解决方案is for the project to roll back extension method support。 ImageResizer 3.2.2将不再提供扩展方法,但某些功能将在ResizeSettings和Instructions类中重复,以最大限度地减少那些已针对新alpha API编码的人的破坏。

ImageResizer V4很可能需要.NET 3.5,并会重新引入缺失的功能。


更新:please see this question instead如果您对此catch-22有任何解决方案。

我为这些问题道歉。 我仍然在尝试收集数据并发现一个长期的解决方案,但这是我到目前为止所做的:

解决方法A:

在Solution Explorer中,展开项目中的References文件夹,选择ImageResizer,然后转到Properties。将别名字段从“全局”更改为“红色”。

解决方法B:

将项目设置为使用.NET 2.0,保存,然后将其还原为使用.NET 3.5或.NET 4。

解决方法C:

手动删除System.Core引用并添加正确的引用。 (通常的罪魁祸首是在3.5项目中使用System.Core 3.0引用的升级项目)。在ASP.NET上,您可以执行此操作in web.config

解决方法D:

Revert to 3.2.0, but only if you're using C#.

为什么会这样?

VisualStudio / MSBuild在编译期间在项目中找到System.Runtime.CompilerServices.ExtensionAttribute的多个定义,但是编译器决定使用public,而不是选择System.Core中定义的internal副本, ImageResizer.dll中定义的程序集本地副本。然后它抱怨,因为其他组件无法到达它。空洞。

应该发生什么

Microsoft has used this technique过去曾多次没有问题,并且已被广泛记录。编译器假设选择公共实例以供项目范围使用,而是选择“内部”副本。这并没有影响到许多开发人员;并且只有少数人可以通过新项目重现它。

公开与内部

V2.3.0将ExtensionAttribute定义为public而不是internal。这导致VB项目中的编译定时器错误,但在C#项目中没有。我立即发布了2.3.1,标记为internal,但我现在看到了C#项目的问题。 Catch-22在这里。

它适用于其他人...... and 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/

Using extension methods in .NET 2.0?

'hack'是even featured in MSDN magazine

你如何提供帮助

我需要更多数据来完全解决这个问题。如果您遇到此问题,请将项目的.zip文件通过电子邮件发送至support@imageresizing.net,并包含您的VisualStudio / .NET版本号(转到Visual Studio,帮助,关于,然后单击{{1然后将其粘贴到电子邮件中)。

希望我能够找到触发问题的确切情况。

更新 - 刚刚找到this article,这意味着唯一的解决方案是创建程序集的多个版本。但是Microsoft didn't!我错过了什么?此外,NuGet不支持2.0 vs 3.5版本控制,因此除非我能找到单组装解决方案,否则我可能不得不放弃2.0支持。