如何添加对未使用Silverlight Runtime构建的程序集的引用?

时间:2011-07-14 12:35:14

标签: c# asp.net silverlight

我正在寻找可以添加ShapeMap.dll作为参考的可能解决方案, 但是当我尝试添加引用时,我得到一个错误说明:

  

您无法添加对ShapeMap.dll的引用,因为它不是针对Silverlight运行时构建的。 Silverlight项目仅适用于Silverlight程序集“

我现在该怎么办?

3 个答案:

答案 0 :(得分:10)

虽然Silverlight代码可能看起来和闻起来像旧的.NET支持的逻辑,但 Silverlight的运行时与支持常规.NET应用程序不同
将Silverlight运行时视为.NET运行时的子集是很有用的:Silverlight意味着在“沙箱”中运行,因此许多不安全的功能(如直接访问文件系统)不是允许。

因此,只能将Silverlight程序集添加到Silverlight项目中。

因此,您所得到的错误是:您拥有的ShapeMap.dll版本不是为Silverlight运行时构建的。

这种情况有两种方法:

  • 查找或构建Silverlight支持的DLL版本
  • 以某种方式重构Silverlight应用程序,以便它通过WebServices利用DLL的功能(如果这是有道理的,因为名称ShapeMap.dll表明这可能会处理难以/无法远程处理的UI对象)

获取Silverlight支持的DLL版本:
第一选择:可能只是你可以获得发现.NET版本的程序集的Silverlight版本的二进制文件
第二种选择:可能是您可以获得[.NET目标] DLL的源代码
如果是这样,你可以尝试 - 我强调“尝试” - 从中​​制作一个Silverlight程序集。问题可能是源代码使用仅使用.NET的习语/ API调用,然后您需要转换它们;几个只是.NET-to-SL“陷阱”可以很容易地转换,其他是绝对的障碍(例如,直接访问文件系统,注册表等),尽管,可能只是注释掉有问题的部分代码,如果,某种程度上Silverlight不会使用DLL的底层功能。

现在......为了充分披露......
有一些技术允许“欺骗”Visual Studio,以便在SilverLight项目中接受.NET程序集。请参阅示例"Reusing .NET assemblies in Silverlight"。但要注意,虽然非常了解.NET和Silverlight运行时的性质,并且在某些情况下可能有用,但这些技术没有文档记录,更重要的是,取决于DLL使用的.NET API子集,只是允许克服构建时阻塞,陷入各种运行时错误(当/如果应用程序调用DLL到方法,而这些方法又调用运行时的.NET方法)。

答案 1 :(得分:6)

如果您有权访问该程序集的源文件(dll),请创建一个新的Silverlight类库项目,并将所有现有的源文件添加到新项目中。然后尝试构建项目。根据依赖项的数量,您可以成功构建与Silverlight兼容的程序集版本。

如果您没有源代码,那么抱歉您运气不好。

答案 2 :(得分:1)

Silverlight在.net框架的“子集”中工作,有些东西的组织方式不同,并且工作方式与普通的WPF应用程序不同(就像所有内容都需要异步才能保持UI响应)。您可以将其视为“受保护的”.net环境,因此您可能无法引用或使用非silverlight dll。

与之前的答案状态一样,使用源代码并将其复制粘贴到SL库项目中,编译并使用它。