<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_kevin-Y</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/16240/rss</id><updated>2011-12-01T15:21:41Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/16240/rss"/><entry><id>http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html</id><title type="text">remoting怪现象。方法长时间不返回，也不报异常。</title><summary type="text">功能：下载文件。方式：调用Remoting方法，得到整个文件的字节数组，写到本地文件。代码：public static bool DownloadFromTestPool(string pFileName, string pLocalFullPath){ bool isOk = true; System.IO.FileStream write = null; try { System.IO.FileInfo file = new FileInfo(pLocalFullPath); if (!file.Directory.Exists) ...</summary><published>2011-12-01T15:15:00Z</published><updated>2011-12-01T15:15:00Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html"/><content type="html">&lt;p&gt;功能：下载文件。&lt;/p&gt;&#xD;
&lt;p&gt;方式：调用Remoting方法，得到整个文件的字节数组，写到本地文件。&lt;/p&gt;&#xD;
&lt;p&gt;代码：&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; DownloadFromTestPool(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pFileName, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pLocalFullPath)&lt;br /&gt;{&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; isOk = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;    System.IO.FileStream write = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        System.IO.FileInfo file = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FileInfo(pLocalFullPath);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!file.Directory.Exists)&lt;br /&gt;            file.Directory.Create();&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] buffer = Factory.MessionFacade.DownFromTestPool(pFileName);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Factory.MessionFacade为Remoting远程代理&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        write = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FileStream(pLocalFullPath, FileMode.Create);&lt;br /&gt;        write.Write(buffer, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, buffer.Length);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;    {&lt;br /&gt;        isOk = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;        GeneralMethod.HandleException(ex);&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (write != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            write.Close();&lt;br /&gt;    }&lt;br /&gt;    &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; isOk;&lt;br /&gt;}&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;以上方法多次使用都没有问题。但近来出现了一个怪现象。连续下载多个文件时，一般在第三个文件，以下这行代码会长时间无返回，也不抛异常，相当的无奈。&lt;/p&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] buffer = Factory.MessionFacade.DownFromTestPool(pFileName);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Factory.MessionFacade为Remoting远程代理&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html" target="_blank"&gt;心想&lt;/a&gt;是不是一次的字节数组过大，在某些公网的情况下会有问题呢？ 改为使用断点分次下载，情况依旧。由于方法是长时间不返回且无异常，只好利用异步超时的方式去检测这种情况，并重新调用Remoting方法方法。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;" onclick="cnblogs_code_show('dd727cf0-87d2-4f96-adc5-e3b883a2c0eb')"&gt;&#xD;
&lt;div id="cnblogs_code_open_dd727cf0-87d2-4f96-adc5-e3b883a2c0eb" &gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; SyncDownloader&lt;br /&gt;    {&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] DownloadBytesHandle(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pFileName, &lt;span style="color: #0000ff;"&gt;long&lt;/span&gt; pPosition, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; pMaxSize);&lt;br /&gt;&lt;br /&gt;        System.IO.FileStream write = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;long&lt;/span&gt; pos = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; lastReceiveSize = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; bufferVersion = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;        SyncDownloadItem curDown;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; SyncDownloader()&lt;br /&gt;        {&lt;br /&gt;            &lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; ManualResetEvent timeoutObject = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ManualResetEvent(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;        &lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; StartDownload(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; fileName, &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; localFullPath)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; buffersize = &lt;span style="color: #800080;"&gt;50000&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;默认500K一次   25000 12500 6000 3000  1500   &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            bufferVersion = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;            pos = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;br /&gt;            lastReceiveSize = buffersize;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;默认与最大的一致&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; isOk = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; timeoutTimes = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;超时20次退出下载。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                System.IO.FileInfo file = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FileInfo(localFullPath);&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!file.Directory.Exists)&lt;br /&gt;                    file.Directory.Create();&lt;br /&gt;                write = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FileStream(localFullPath, FileMode.Create);                &lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;)&lt;br /&gt;                {                    &lt;br /&gt;                    timeoutObject.Reset();&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (lastReceiveSize &amp;lt; buffersize)&lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                    bufferVersion++;&lt;br /&gt;                               &lt;br /&gt;                    &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;异步下载&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    DownloadBytesHandle fh = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DownloadBytesHandle(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.dwonloadBytes);&lt;br /&gt;                    AsyncCallback callback = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; AsyncCallback(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.downloadCallback);&lt;br /&gt;                    IAsyncResult ar = fh.BeginInvoke(fileName, pos, buffersize, callback, bufferVersion);&lt;br /&gt;&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (!timeoutObject.WaitOne(&lt;span style="color: #800080;"&gt;10000&lt;/span&gt;))&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;10秒应能下载完成&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    {&lt;br /&gt;                        timeoutTimes++;&lt;br /&gt;                        Console.Write(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;_{0}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, timeoutTimes);  &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;超时加下划线                      &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (timeoutTimes &amp;gt; &lt;span style="color: #800080;"&gt;20&lt;/span&gt;)&lt;br /&gt;                            &lt;span style="color: #0000ff;"&gt;break&lt;/span&gt;;&lt;br /&gt;                        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;超时&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                        &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (buffersize &amp;gt; &lt;span style="color: #800080;"&gt;3000&lt;/span&gt;)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;10秒无论如何都应能下载1.5K&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                            buffersize = buffersize / &lt;span style="color: #800080;"&gt;2&lt;/span&gt;;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;超时下载尺寸减半。                        &lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                    }&lt;br /&gt;                    &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                    {                        &lt;br /&gt;                        &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] buffer = fh.EndInvoke(ar);&lt;br /&gt;                        Console.Write(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;不断的加点&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                        write.Write(buffer, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, buffer.Length);&lt;br /&gt;                        pos += buffer.Length;&lt;br /&gt;                        lastReceiveSize = buffer.Length;&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;                isOk = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; (Exception ex)&lt;br /&gt;            {&lt;br /&gt;                isOk = &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;                GeneralMethod.HandleException(ex);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;finally&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (write != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                    write.Close();&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; isOk;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; downloadCallback(IAsyncResult ar)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; dbVer = Convert.ToInt32(ar.AsyncState);           &lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (dbVer == &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.bufferVersion)&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;只有当次调用才释放&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                timeoutObject.Set();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] dwonloadBytes(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; pFileName, &lt;span style="color: #0000ff;"&gt;long&lt;/span&gt; pPosition, &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; pMaxSize)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;System.Threading.Thread.Sleep(11000);&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;睡11秒。判断是否还会执行。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] buffer = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;try&lt;/span&gt;&lt;br /&gt;            {                &lt;br /&gt;                buffer = Factory.AreaIssueFacade.DownFromTestPool(pFileName, pPosition, pMaxSize);&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;catch&lt;/span&gt; { }&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;忽略所有错误&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; buffer;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;p&gt;利用上面的代码，下载4个文件，以下是过程日志。每一个点代表一次成功调用，下划线代表超时，下划线后面的数字代表第几次超时。&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;开始从发布服务器下载文件..&lt;br /&gt;下载HIS.Mattgr.UI.dll.......... 从发布服务器下载成功&lt;br /&gt;下载HIS.Mattgr.Services.dll............ 从发布服务器下载成功&lt;br /&gt;下载HIS.Mattgr.Interface.dll_1_2_3......... 从发布服务器下载成功&lt;br /&gt;下载HIS.PublicMattgr.Services.dll......... 从发布服务器下载成功&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html"&gt;每次的日志&lt;/a&gt;都显示在第三个文件一开始都会有连续的三次调用超时，而之后又会很快。真走运，如此稳定的异常情况。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kevin-Y/aggbug/2271310.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/12/01/2271310.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kevin-Y/archive/2011/09/08/2171019.html</id><title type="text">找了一段生成ClickOne的快捷方式的生成代码</title><summary type="text">找了一段生成ClickOne的快捷方式的生成代码，晚上回去试试能否可用。</summary><published>2011-09-08T02:23:00Z</published><updated>2011-09-08T02:23:00Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevin-Y/archive/2011/09/08/2171019.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/archive/2011/09/08/2171019.html"/><content type="html">&lt;p&gt;找了一段生成ClickOne的快捷方式的生成代码，晚上回去试试能否可用。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; CheckForShortcut()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;    ApplicationDeployment ad &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ApplicationDeployment.CurrentDeployment;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (ad.IsFirstRun)&lt;br /&gt;&lt;br /&gt;    {&lt;br /&gt;&lt;br /&gt;        Assembly code &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assembly.GetExecutingAssembly();&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; company &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; description &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Attribute.IsDefined(code, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(AssemblyCompanyAttribute)))&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            AssemblyCompanyAttribute ascompany &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (AssemblyCompanyAttribute)Attribute.GetCustomAttribute(code,&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(AssemblyCompanyAttribute));&lt;br /&gt;&lt;br /&gt;            company &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; ascompany.Company;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Attribute.IsDefined(code, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(AssemblyDescriptionAttribute)))&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            AssemblyDescriptionAttribute asdescription &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (AssemblyDescriptionAttribute)Attribute.GetCustomAttribute(code,&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(AssemblyDescriptionAttribute));&lt;br /&gt;&lt;br /&gt;            description &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; asdescription.Description;&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (company &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span style="color: #000000;"&gt; description &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty)&lt;br /&gt;&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; desktopPath &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&lt;br /&gt;            desktopPath &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Desktop),&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, description, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.appref-ms&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; shortcutName &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Empty;&lt;br /&gt;&lt;br /&gt;            shortcutName &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Concat(Environment.GetFolderPath(Environment.SpecialFolder.Programs),&lt;br /&gt;&lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, company, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, description, &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;.appref-ms&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;            System.IO.File.Copy(shortcutName, desktopPath, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kevin-Y/aggbug/2171019.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/09/08/2171019.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kevin-Y/archive/2011/06/10/2077495.html</id><title type="text">持续集成好工具CruiseControl.Net</title><summary type="text">我不希望程序员各自编译一份dll来发布，希望由统一的一台机器自动获取源代码并自动生成发布的文件。原来这叫持续集成。这是园内的文章。这里收藏一下。http://www.cnblogs.com/cnblogsfans/archive/2008/04/24/1169689.htmlhttp://www.cnblogs.com/greatqn/archive/2008/08/05/1261298.html</summary><published>2011-06-10T04:01:00Z</published><updated>2011-06-10T04:01:00Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevin-Y/archive/2011/06/10/2077495.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/archive/2011/06/10/2077495.html"/><content type="html">&lt;p&gt;我不希望程序员各自编译一份dll来发布，希望由统一的一台机器自动获取源代码并自动生成发布的文件。&lt;/p&gt;&#xD;
&lt;p&gt;原来这叫持续集成。这是园内的文章。这里收藏一下。&lt;/p&gt;&#xD;
&lt;p&gt;http://www.cnblogs.com/cnblogsfans/archive/2008/04/24/1169689.html&lt;/p&gt;&#xD;
&lt;p&gt;http://www.cnblogs.com/greatqn/archive/2008/08/05/1261298.html&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kevin-Y/aggbug/2077495.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/06/10/2077495.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kevin-Y/archive/2011/05/20/2052226.html</id><title type="text">如果取出绑定到事件的方法数量</title><summary type="text">// 事件访问器的定义int eventCount=0; public event EventHandler NumberChanged { add { eventCount++; numberChanged = value; } remove { eventCount--; numberChanged -= value; } }或取委托数组public event EventHandler NumberChanged;//某个方法内Delegate[] delegates = NumberChanged.GetInvocationList();</summary><published>2011-05-20T09:49:00Z</published><updated>2011-05-20T09:49:00Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevin-Y/archive/2011/05/20/2052226.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/archive/2011/05/20/2052226.html"/><content type="html">&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; 事件访问器的定义&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; eventCount&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;event&lt;/span&gt;&lt;span style="color: #000000;"&gt; EventHandler NumberChanged {&lt;br /&gt;        add {&lt;br /&gt;    eventCount&lt;/span&gt;&lt;span style="color: #000000;"&gt;++&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;            numberChanged &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; value;&lt;br /&gt;        }&lt;br /&gt;        remove {&lt;br /&gt;     eventCount&lt;/span&gt;&lt;span style="color: #000000;"&gt;--&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;            numberChanged &lt;/span&gt;&lt;span style="color: #000000;"&gt;-=&lt;/span&gt;&lt;span style="color: #000000;"&gt; value;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/p&gt;&#xD;
&lt;p&gt;或取委托数组&lt;br /&gt;public event EventHandler &lt;span style="color: #000000;"&gt;NumberChanged&lt;/span&gt;;&lt;br /&gt;//某个方法内&lt;br /&gt;Delegate[] delegates = &lt;span style="color: #000000;"&gt;NumberChanged&lt;/span&gt;.GetInvocationList();&lt;/p&gt;&#xD;
&lt;img src="http://www.cnblogs.com/kevin-Y/aggbug/2052226.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/05/20/2052226.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/kevin-Y/archive/2011/03/12/1982118.html</id><title type="text">AppDomain加载与释放dll</title><summary type="text">几年前写过同名随笔，但今天应不大适用了。但还有几个朋友留言关注，我重新发布相关代码。首先我们的目的就是运行期间更新dll，并应用dll。这个过程需要应用AppDomain来解决，办法就是创建新的AppDomain加载dll，并在dll更新后创建新的AppDomain来加载新的dll。好了，我们有两个目录需要完成。第一个目标：运行时能更新dll。1.创建AppDomain时设置ShadowCopyFilesAppDomainSetup _setup = new AppDomainSetup();_setup.ShadowCopyFiles = &amp;quot;true&amp;quot;;_setup.Lo</summary><published>2011-03-12T03:49:00Z</published><updated>2011-03-12T03:49:00Z</updated><author><name>生命体验之kevin-Y</name><uri>http://www.cnblogs.com/kevin-Y/</uri></author><link rel="alternate" href="http://www.cnblogs.com/kevin-Y/archive/2011/03/12/1982118.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/kevin-Y/archive/2011/03/12/1982118.html"/><content type="html">&lt;p&gt;几年前写过同名随笔，但今天应不大适用了。但还有几个朋友留言关注，我重新发布相关代码。&lt;/p&gt;&#xD;
&lt;p&gt;首先我们的目的就是运行期间更新dll，并应用dll。这个过程需要应用&amp;nbsp;AppDomain来解决，办法就是创建新的AppDomain加载dll，并在dll更新后创建新的AppDomain来加载新的dll。&lt;/p&gt;&#xD;
&lt;p&gt;好了，我们有两个目录需要完成。&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;第一个目标：运行时能更新dll。&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;1.创建AppDomain时设置ShadowCopyFiles&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;AppDomainSetup _setup &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; AppDomainSetup();&lt;br /&gt;_setup.ShadowCopyFiles &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;_setup.LoaderOptimization &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoaderOptimization.SingleDomain;&lt;br /&gt;AppDomain _curDomain &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; AppDomain.CreateDomain(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;TestDomain&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;, _setup);&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;p&gt;2.当我们的主程序需要引用动态加载dll中的某个对象的实例时，该实例必须创建为代理类。代理类的意思是类需要继承自MarshalByRefObject。此外一般会使用另一个公共类库定义基类或接口来使用这个代理类。好了，先看怎么样在前面创建的程序域中创建代理类的实例&#xD;
&lt;/p&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;System.Runtime.Remoting.ObjectHandle objHandle &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; pJobDomain.CreateInstanceFrom(strDllFilePath, strClassName);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; objBuild &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; objHandle.Unwrap();&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (objBuild &lt;/span&gt;&lt;span style="color: #000000;"&gt;==&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;throw&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Exception(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;buildWorker -- 创建对象失败&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ido &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (IDo)objBuild;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;IDo是一个接口&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&#xD;
&lt;p&gt;好了，如果&lt;span style="color: #000000;"&gt;strDllFilePath=&amp;ldquo;ClassLibrary.dll&amp;rdquo;，那么&lt;span style="color: #000000;"&gt;运行目录的&lt;/span&gt;ClassLibrary.dll文件被加载后，我们还是可以随便更新他的&lt;span style="color: #000000;"&gt;。但更新后，程序域不重新创建的话，&lt;span style="color: #000000;"&gt;&lt;span style="color: #000000;"&gt;使用上面的方法再次创建代理实例，&lt;/span&gt;&lt;/span&gt;我们的程序依然看不到新的dll的运行效果的，因为我们加载时设置了ShadowCopyFiles="true"。当然你可能会说设置为"false"行不行呢？你可以试试，但我要说的是，如果这样的话，我们第一个目标都完成不了。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;strong&gt;&lt;span style="color: #000000;"&gt;&lt;span style="color: #000000;"&gt;第二个目标：应用新的dll。&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&#xD;
&lt;p&gt;&lt;span style="color: #000000;"&gt;&lt;span style="color: #000000;"&gt;其实很简单，UnLoad后再创建一次，使用新的AppDomain创建代理类 ，程序就能看到新dll的效果。好，我定义了一个方法保证每运行一次都会创建一个新的程序域&lt;/span&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;span style="color: #000000;"&gt;&#xD;
&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding-left:5px;padding-right:5px;"&gt;&#xD;
&lt;pre&gt;&lt;div&gt;&lt;span style="color: #000000;"&gt;AppDomain _curDomain;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; load()&lt;br /&gt;{&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; (_curDomain &lt;/span&gt;&lt;span style="color: #000000;"&gt;!=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;已创建了程序域&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    {&lt;br /&gt;        AppDomain.Unload(_curDomain);&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;先关闭再打开。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        _curDomain &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;    }            &lt;br /&gt;    AppDomainSetup _setup &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; AppDomainSetup();&lt;br /&gt;    _setup.ShadowCopyFiles &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;true&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;            &lt;br /&gt;    _setup.LoaderOptimization &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; LoaderOptimization.SingleDomain;    &lt;br /&gt;    _curDomain &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; AppDomain.CreateDomain(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;TestDomain&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;&lt;span style="color: #000000;"&gt;, _setup);&lt;br /&gt;}&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&#xD;
&lt;/div&gt;&#xD;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&#xD;
&lt;p&gt;提供一个&lt;a href="http://files.cnblogs.com/kevin-Y/AssemblyTestDomain.rar"&gt;kevin-y的测试的源代码&lt;/a&gt; 给大家下载&lt;/p&gt;&lt;img src="http://www.cnblogs.com/kevin-Y/aggbug/1982118.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/kevin-Y/archive/2011/03/12/1982118.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
