更新(2012 年 6 月 20 日):最好的解决方案是让项目回滚扩展方法支持。ImageResizer 3.2.2 将不再提供扩展方法,但某些功能将在 ResizeSettings 和 Instructions 类中重复,以尽量减少那些已经针对新 alpha API 进行编码的人的损坏。
ImageResizer V4 很可能需要 .NET 3.5,并且会重新引入缺失的功能。
更新:如果您对此 catch-22 有任何解决方案,请改为查看此问题。
我为这些问题道歉。我仍在尝试收集数据并发现长期解决方案,但这是我目前所拥有的:
解决方法一:
在解决方案资源管理器中,展开项目中的 References 文件夹,选择 ImageResizer,然后转到 Properties。将 Aliases 字段从“global”更改为“ir”。
解决方法 B:
将您的项目设置为使用 .NET 2.0,保存,然后将其恢复为使用 .NET 3.5 或 .NET 4。
解决方法 C:
手动删除您的 System.Core 引用并添加正确的引用。(通常的罪魁祸首是在 3.5 项目中使用 System.Core 3.0 引用的升级项目)。在 ASP.NET 上,您可以在 web.config中执行此操作。
解决方法 D:
恢复到 3.2.0,但前提是您使用的是 C#。
为什么会这样
VisualStudio/MSBuild 在编译期间会在项目中找到多个定义,但编译器System.Runtime.CompilerServices.ExtensionAttribute
没有选择 System.Core 中定义的副本,而是public
决定使用internal
ImageResizer.dll 中定义的程序集本地副本。然后它会抱怨,因为其他程序集无法访问它。无名。
应该发生什么
Microsoft过去曾多次使用此技术而没有出现任何问题,并且已被广泛记录。编译器应该选择公共实例以供项目范围内使用,但它选择的是“内部”副本。这并没有影响到许多开发人员;只有少数人可以通过新项目重现它。
公共与内部
V2.3.0 将 ExtensionAttribute 定义为public
而不是internal
. 这会在 VB 项目中导致编译计时器错误,但在 C# 项目中不会。我立即发布了标记为 的 2.3.1 internal
,但我现在看到的是 C# 项目的问题。此处为第 22 条军规。
它适用于其他人......和微软!为什么是我?
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 中使用扩展方法?
'hack'甚至出现在 MSDN 杂志上。
你可以如何提供帮助
我需要更多数据才能完全弄清楚这一点。如果您遇到问题,请将项目的 .zip 文件通过电子邮件发送到support@imageresizing.net
,并附上您的 VisualStudio/.NET 版本号(转到 Visual Studio、帮助、关于,然后单击Copy Info
,然后将其粘贴到电子邮箱中邮件)。
希望我能够找到触发问题的确切情况。
更新- 刚刚找到这篇文章,这意味着唯一的解决方案是创建多个版本的程序集。但微软没有!我错过了什么?此外,NuGet 不支持 2.0 和 3.5 版本控制,所以除非我能找到单一程序集解决方案,否则我可能不得不放弃 2.0 支持。