如何确定为桌面应用程序(在.Net中)创建的DLL是否可以在Silverlight应用程序中运行? 加分问题:由于SilverLight for Windows Phone 7是Silverlight的子集,如何确定该DLL是否适用于为Windows Phone 7创建的应用程序?
注意:由于WP7不支持P / Invoke,这意味着任何使用P / Invoke的.Net dll都不适用于WP7 silverlight应用程序。我想知道是否有任何简单的方法来确定这一点(无需自己运行应用程序)。
原因是我需要一些图像处理算法实现,并想在购买之前弄清楚它们是否可以在Windows Phone 7平台上运行。
答案 0 :(得分:3)
简而言之,它不会。两个CLR运行时完全不同,尽管它们具有相似的接口。
有三点需要注意:
(1)如果您有源代码,并且该代码不依赖于Silverlight不支持的任何内容,您可以尝试通过引用Silverlight项目中的源文件来为Silverlight进行交叉编译。有时您可以通过轻微的源调整或明智地使用#if定义来使用它。有时你不能。
(2)在Silverlight 4 / .NET 4中,有时可以重用在.NET中为Silverlight编译的程序集。 CLR团队有一篇博文explaining how it works。然而,这是一个非常有限的解决方案,因为(a)首先必须为Silverlight编译程序集,并且(b)这些便携式程序集只能调用一小部分本身是可移植的其他程序集,例如Mscorlib,System, System.Core等等。 (我应该注意,这对你不起作用,因为你的目标是WP7,它基于Silverlight 3。)
(3)您可以偶尔使用DLL内部进行破解,并破解已编译的DLL,使其相信它是Silverlight DLL。有一篇关于如何做的博客文章here。但同样,这是一个非常有限的解决方案,因为程序集无法调用Silverlight中未包含的任何方法或程序集。这包括一些非常基本的东西,比如Buffer.BlockCopy()的一些覆盖,就是那种东西。如果这种技术适用于复杂的商业图像处理DLL,我会感到惊讶,但是发生了一些奇怪的事情。