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

Mah*_*ika 4 c# asp.net silverlight

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

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

现在我该怎么做?

mjv*_*mjv 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 targeting] DLL 的源代码.
如果是这样你可以尝试 - 我强调"尝试" - 从中​​制作一个Silverlight程序集.问题可能是源代码使用仅使用.NET的习语/ API调用,然后您需要转换它们; 几个只是.NET-to-SL"陷阱"可以很容易地转换,其他是绝对的障碍(例如,直接访问文件系统,注册表等),尽管,可能只是注释掉有问题的部分代码,如果,某种程度上Silverlight不会使用DLL的底层功能.

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


Oli*_*old 6

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

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