故事是这样的:我们有一个组件,是一个标准的Class Library,里面有一些代码是实现了某些计算或者业务逻辑。例如下面这样

然后,我们做了一个Silverlight的应用程序,和一个用于运行该程序的网站

我们想让这个按钮,能调用DAL中Customer的PlaceOrder方法。这样的要求很自然不过了吧

我们马上会想到,要在SilverlightApplication中添加对DAL项目的引用。

很不幸,我们居然会遇到一个错误

这个错误提示的意思是说,你只能引用Silverlight项目。

我们先来说一下如何解决这个问题吧,最后会解释具体的原因。

好吧,既然说只能引用Silverlight项目,那么我们就从善如流吧。接下来他们添加一个Silverlight的Class Library

那么,我们要思考一个问题,既然我们在DAL中写好了那些代码,是否可以在这个项目中进行重用呢?

有的童鞋马上会说,把那些cs文件复制过来吧。嗯,脑筋动得还是挺快的,不过。。

下面要出绝招了。我们可以将DAL项目中的那些cs文件链接过来,这样就只要维护一份cs文件了,而不要复制多份。

请注意,这里选择“Add as link”

赶紧编译一下吧。然后,我们在Silverlight Application中添加对这个DAL的引用

然后编写按钮代码如下

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes; using DAL; namespace SilverlightApplication
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
} private void btTest_Click(object sender, RoutedEventArgs e)
{
var customer = new Customer();
MessageBox.Show(customer.PlaceOrder().ToString());
}
}
}

看起来还不错,不是吗?

那么,这是为什么呢?这里的根本原因是Silverlight的运行时(CLR)其实是一个独立的版本,它与所有标准的.NET FRAMEWORK版本下面的CLR都不一样。它只能做一部分事情,而不是全部的事情。(上述的DAL是很简单的一个示例,如果涉及到一些复杂操作,添加为link的方式不一定能编译通过)

当然,事实上说起来,真的有必要在Silverlight的程序里面嵌入什么很复杂的程序集吗?我想未必。

尤其是在企业或者商业应用开发的场景下,Silverlight大多是作为一个UI的载体而已,几乎所有的功能(例如与外界资源的交互)都是通过服务来实现的。这里的服务主要指的是WCF服务,当然也不限于此。

如何让一个现有的程序集运行在Silverlight环境中的更多相关文章

  1. 用 Visual Studio Code 调试运行在 homestead 环境中的 laravel 程序

    由于之前做 .net 开发比较熟悉 visualstudio,所以自 visualstudio code 发布后就一直在不同场合使用 vscode ,比如前端.node等等.最近在做 laravel ...

  2. UDP(强行关闭了一个现有的连接远程主机)

    事件回顾:客户端连接服务器 ,一段时间后会发生服务器“挂掉”的情况,为了找到原因,在调试模式下运行服务器,捕捉到了一下异常: 红色框出来的即为异常原因:强行关闭了一个现有的连接远程主机 然后就发生了可 ...

  3. Adb connection Error:远程主机强迫关闭了一个现有的连接

    在用手机调试程序时,有时会出现“Adb connection Error:远程主机强迫关闭了一个现有的连接”的错误. 出现这种错误时,可以按照以下步骤解决: (1)运行cmd.exe,并将目录CD到\ ...

  4. Adb connection Error:远程主机强迫关闭了一个现有的连接 解决方法

    用真机调试程序的时候,eclipse 的 Console 总是出现如下的错误"Adb connection Error:远程主机强迫关闭了一个现有的连接". 问题出现的原因:这是 ...

  5. android:Adb connection Error:远程主机强迫关闭了一个现有的连接

    用真机调试程序的时候,eclipse的console总是出现如下的错误“Adb connection Error:远程主机强迫关闭了一个现有的连接” 问题出现的原因:这是ddms调用adb引发的. 经 ...

  6. 在向服务器发送请求时发生传输级错误。 (provider: TCP 提供程序, error: 0 - 远程主机强迫关闭了一个现有的连接。)

    用VS2005+SQLSERVER2008开发C/S的程序,程序上线运行一段时间之后发现在某些功能偶尔出现如下的错误: 在向服务器发送请求时发生传输级错误. (provider: TCP 提供程序, ...

  7. C#程序集系列01,用记事本编写C#,IL代码,用DOS命令编译程序集,运行程序

    本篇主要体验:编写C#,IL代码,用"VS2012开发人员命令提示"编译成程序集,并运行程序. □ C#文件编译为程序集 →在F盘创建as文件夹→在as文件夹下创建MyClass. ...

  8. Android真机调试——远程主机强迫关闭了一个现有的连接。

    以前用真机调试程序的时候,Android Studio 出现如下的错误 [2016-11-12 10:37:36 - DeviceMonitor] Adb connection Error:远程主机强 ...

  9. 解决:Adb connection Error:远程主机强迫关闭了一个现有的连接

    最近刚入手了一台G12,用它来调试程序的时候,eclipse的console总是出现如下的错误“Adb connection Error:远程主机强迫关闭了一个现有的连接” 问题出现的原因:这是ddm ...

随机推荐

  1. 自动化运维工具——pssh

    PSSH介绍 pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的.它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持 ...

  2. python模块之pickle

    和json不同的是: json只支持str,int,tuple,list,dict. pickle支持python里所有的数据类型,但是只能在python里序列化,不跨平台,python独有. 代码示 ...

  3. iOS 中的视图函数 init initwithnib viewDidLoad viewWillAppear的总结

    我要总结的函数主要是这几个: UIView *view-如果view还没有被初始化的话,getter方法会先调用[self loadView],如果getter或者setter方法被重写了,子类中的g ...

  4. ACM-ICPC 2018 沈阳赛区网络预赛 F. Fantastic Graph(有源上下界最大流 模板)

    关于有源上下界最大流: https://blog.csdn.net/regina8023/article/details/45815023 #include<cstdio> #includ ...

  5. Linux学习-核心的编译与安装

    编译核心与核心模块 核心与核心模块需要先编译起来,而编译的过程其实非常简单,你可以先使用『 make help 』去查 阅一下所有可用编译参数, 就会知道有底下这些基本功能: [root@study ...

  6. loj2256 「SNOI2017」英雄联盟

    真的是裸背包啊-- #include <iostream> #include <cstdio> using namespace std; typedef long long l ...

  7. Android 标题栏(2)

    本文来自网易云社区 作者:孙圣翔 添加ActionProvider 1.在menu菜单中添加app:actionProviderClass属性: <item     android:id=&qu ...

  8. 提交AppStore被拒原因总结

    (1)Information Needed We began the review of your app but aren’t able to continue because we need ad ...

  9. Python开启进程的2中方式

    知识点一:进程的理论 进程:正在进行的一个程序或者说一个任务,而负责执行任务的则是CPU 进程运行的的三种状态: 1.运行:(由CPU来执行,越多越好,可提高效率) 2.阻塞:(遇到了IQ,3个里面可 ...

  10. TOJ2680: 最大矩阵连乘次数

    2680: 最大矩阵连乘次数  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal Submit: 144 ...