2010-09-30 42 views
1

如何查找为桌面应用程序创建的DLL(在.Net中)是否可以在Silverlight应用程序中使用? 奖金问题:由于Silverlight for Windows Phone 7是Silverlight的子集,我如何确定该DLL是否可以在为Windows Phone 7创建的应用程序中工作?如何查找在.Net中创建的dll是否可以在Silverlight中使用?

注意:由于WP7不支持P/Invoke - 这意味着任何使用P/Invoke的.dll都不适用于WP7 silverlight应用程序。我想知道是否有任何简单的方法来确定(无需运行应用程序本身)。

原因是我需要一些图像处理算法的实现,并想在他们购买之前弄清楚他们是否能在Windows Phone 7平台上工作。

+0

跳过组件可移植性的技术问题,为什么不联系供应商并询问他们是否测试了他们在电话上运行的代码?即使该产品在那里不起作用,您也可能会激励供应商将其移植到手机上,这样他们可以将更多的钱卖给您(以及这个新兴市场中的许多其他开发人员)。 – Brian 2010-09-30 10:12:06

+0

如果我要在Reflector中查看.Net dll,而不是查看其引用的其他dll的列表,是否有任何元数据可以检查它是否为SilverLight框架构建(如果它是为Windows Phone 7建造的)? – 2010-10-01 21:09:13

回答

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,我会感到惊讶,但发生了一些奇怪的事情。

相关问题