﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-blog.Toby-随笔分类-VS 2005</title><link>http://www.blogjava.net/SIDNEY/category/21074.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 15 Mar 2008 22:51:44 GMT</lastBuildDate><pubDate>Sat, 15 Mar 2008 22:51:44 GMT</pubDate><ttl>60</ttl><item><title>Reporting Service 報表參數預設值技巧</title><link>http://www.blogjava.net/SIDNEY/archive/2008/03/11/185317.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Tue, 11 Mar 2008 04:16:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2008/03/11/185317.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/185317.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2008/03/11/185317.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/185317.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/185317.html</trackback:ping><description><![CDATA[<table class="ms-formtable" cellpadding="2" width="100%" border="0">
    <tbody>
        <tr>
            <td><span class="ms-discussiontitle"><font color="#006400">應用案例</font>：Reporting Service 報表參數預設值技巧</span><br />
            </td>
            <td class="ms-descriptiontext" valign="top" align="right">
            <table cellspacing="0" cellpadding="0" border="0">
                <tbody>
                    <tr>
                        <td class="ms-vb" noWrap></td>
                    </tr>
                </tbody>
            </table>
            </td>
        </tr>
    </tr>
    <tr>
        <td class="ms-formbody" colspan="2">
        <p><font color="#ffa500">例一</font>：預設值為昨日</p>
        <p>
        <div class="dp-highlighter">
        <table class="dp-vb" cellspacing="0" cellpadding="0" border="0">
            <tbody>
                <tr>
                    <td class="tools-corner"></td>
                </tr>
                <tr>
                    <td class="gutter">1</td>
                    <td class="line1"><span>dateadd(</span><span class="string">"d"</span><span>,-1,today)&nbsp;</span></td>
                </tr>
            </tbody>
            <thead>
                <tr>
                    <td class="tools-corner"></td>
                    <td class="tools" processedcode='dateadd("d",-1,today)&#10;' originalcode='dateadd("d",-1,today)'><a onclick="dp.sh.Utils.ViewSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">view plain</a> | <a onclick="dp.sh.Utils.PrintSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">print</a> | <a onclick="dp.sh.Utils.ToClipboard(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">copy to clipboard</a> | <a onclick="dp.sh.Utils.About(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">?</a></td>
                </tr>
            </thead>
        </table>
        </div>
        <textarea class="vb" style="display: none; width: 422px; height: 37px" name="code" cols="50">dateadd("d",-1,today)</textarea>
        <p>&nbsp;</p>
        <p>說明：將今天日期加上【-1】。</p>
        <p>函數：dateadd ， today<br />
        <br />
        <font color="#ffa500">例二</font>：預設值為上月最後一天 </p>
        <p>
        <div class="dp-highlighter">
        <table class="dp-vb" cellspacing="0" cellpadding="0" border="0">
            <tbody>
                <tr>
                    <td class="tools-corner"></td>
                </tr>
                <tr>
                    <td class="gutter">1</td>
                    <td class="line1"><span>dateadd(</span><span class="string">"d"</span><span>,-1,&nbsp;cdate(</span><span class="string">"#"</span><span>&nbsp;&amp;&nbsp;year(today).ToString&nbsp; &nbsp;</span></td>
                </tr>
                <tr>
                    <td class="gutter">2</td>
                    <td class="line2">&amp;&nbsp;</span><span class="string">"/"</span><span>&nbsp;&amp;&nbsp;&nbsp;&nbsp;month(today).ToString&nbsp;&nbsp;&amp;&nbsp;</span><span class="string">"/1#"</span><span>))&nbsp;&nbsp;</span></td>
                </tr>
            </tbody>
            <thead>
                <tr>
                    <td class="tools-corner"></td>
                    <td class="tools" processedcode='dateadd("d",-1, cdate("#" &amp; year(today).ToString &#13;&#10;&amp; "/" &amp;   month(today).ToString  &amp; "/1#")) &#10;' originalcode='dateadd("d",-1, cdate("#" &amp; year(today).ToString &#13;&#10;&amp; "/" &amp;   month(today).ToString  &amp; "/1#")) '><a onclick="dp.sh.Utils.ViewSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">view plain</a> | <a onclick="dp.sh.Utils.PrintSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">print</a> | <a onclick="dp.sh.Utils.ToClipboard(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">copy to clipboard</a> | <a onclick="dp.sh.Utils.About(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">?</a></td>
                </tr>
            </thead>
        </table>
        </div>
        <textarea class="vb" style="display: none; width: 422px; height: 63px" name="code" rows="1" cols="50">dateadd("d",-1, cdate("#" &amp; year(today).ToString
        &amp; "/" &amp;   month(today).ToString  &amp; "/1#")) </textarea>
        <p>&nbsp;</p>
        <p>說明：先取得【本月第一天】的日期，再加上【-1】，就可得到【上月最後一天】。</p>
        <p>函數：dateadd ， cdate ， year ， today ， month <br />
        <font color="#ffa500"></font></p>
        <p><font color="#ffa500">例三</font>：預設值為上月第一天</p>
        <p>
        <div class="dp-highlighter">
        <table class="dp-vb" cellspacing="0" cellpadding="0" border="0">
            <tbody>
                <tr>
                    <td class="tools-corner"></td>
                </tr>
                <tr>
                    <td class="gutter">1</td>
                    <td class="line1"><span>cdate(</span><span class="string">"#"</span><span>&nbsp;&amp;&nbsp;year(dateadd(</span><span class="string">"m"</span><span>,-1,today)).ToString&nbsp; &nbsp;</span></td>
                </tr>
                <tr>
                    <td class="gutter">2</td>
                    <td class="line2">&amp;&nbsp;</span><span class="string">"/"</span><span>&nbsp;&amp;&nbsp;&nbsp;&nbsp;month(dateadd(</span><span class="string">"m"</span><span>,-1,today)).ToString&nbsp;&nbsp;&amp;&nbsp;</span><span class="string">"/1#"</span><span>)&nbsp;&nbsp;</span></td>
                </tr>
            </tbody>
            <thead>
                <tr>
                    <td class="tools-corner"></td>
                    <td class="tools" processedcode='cdate("#" &amp; year(dateadd("m",-1,today)).ToString &#13;&#10;&amp; "/" &amp;   month(dateadd("m",-1,today)).ToString  &amp; "/1#") &#10;' originalcode='cdate("#" &amp; year(dateadd("m",-1,today)).ToString &#13;&#10;&amp; "/" &amp;   month(dateadd("m",-1,today)).ToString  &amp; "/1#") '><a onclick="dp.sh.Utils.ViewSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">view plain</a> | <a onclick="dp.sh.Utils.PrintSource(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">print</a> | <a onclick="dp.sh.Utils.ToClipboard(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">copy to clipboard</a> | <a onclick="dp.sh.Utils.About(this); return false;" href="http://blog.blueshop.com.tw/jacksun/archive/2007/03/07/49850.aspx#">?</a></td>
                </tr>
            </thead>
        </table>
        </div>
        <textarea class="vb" style="display: none; width: 422px; height: 74px" name="code" rows="4" cols="50">cdate("#" &amp; year(dateadd("m",-1,today)).ToString
        &amp; "/" &amp;   month(dateadd("m",-1,today)).ToString  &amp; "/1#") </textarea>
        <p>&nbsp;</p>
        <p>說明：先取得上月份的年度，接著取得上月份，最後連同字串１一起串連。</p>
        <p>函數：cdate ， year ， dateadd ， today ， month&nbsp; </p>
        </td>
    </tr>
</tbody>
</table>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/185317.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2008-03-11 12:16 <a href="http://www.blogjava.net/SIDNEY/archive/2008/03/11/185317.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Asp.net数组应用</title><link>http://www.blogjava.net/SIDNEY/archive/2008/03/05/183837.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Wed, 05 Mar 2008 01:06:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2008/03/05/183837.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/183837.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2008/03/05/183837.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/183837.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/183837.html</trackback:ping><description><![CDATA[<h2 class="post-title">&nbsp;</h2>
<div class="post-body" id="cczoom">
<p class="code">　Response.Write(Array.IndexOf(abc,"3",1));//在abc数组中查找"3",从abc[1]开始找&nbsp;<br />
　Response.Write(Array.LastIndexOf(abc,"3"));//在abc数组中查找"3",从最后开始找&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　string[]&nbsp;arrStr=new&nbsp;string[8]{"1","4","3","2","16","14","12","14"};//arrStr[0]="1"...arrStr[7]="14"&nbsp;<br />
　Array.Reverse(arrStr);&nbsp;//颠倒arrStr数组，此时arrStr[0]="14"...arrStr[7]="1"&nbsp;<br />
　Array.Sort(arrStr);&nbsp;//给数组排序，此时顺序为1,12,14,14,16,2,3,4（因为是按字符串排序）&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　Array型数组要重定义大小,必须用ReDim(VB),对于大数组会特别慢;且无法在中间插入元素;不能清除它们(只能设置为空或0)&nbsp;<br />
　ArrayList在使用上比Array慢,但是不用重定义大小,使用myArrList.Add("Dog")s可以方便的添加数据&nbsp;<br />
　ArrayList&nbsp;myArrList&nbsp;=&nbsp;new&nbsp;ArrayList();//不用指出数组的大小,而且每个元素可以是任意数据类型;&nbsp;<br />
　myArrList.Insert(1,"abc");&nbsp;//插入元素到数组[1]前&nbsp;<br />
　myArrList.RemoveAt(1);&nbsp;//删除数组元素[1]&nbsp;<br />
　myArrList.Remove("abc");&nbsp;//删除内容为"abc"的数组元素,只删除一次,如果要全删,需要做循环&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　ListItem&nbsp;newItem=new&nbsp;ListItem();newItem.Text="a";newItem.Value="b";&nbsp;<br />
　myDropDown.Items.Add(newItem);//使用ListItem为List框添加项&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　Hashtable&nbsp;ht&nbsp;=new&nbsp;Hashtable();ht["1"]="a";ht.Add("2","a");//Hashtable用法&nbsp;<br />
　SortedList&nbsp;sl=new&nbsp;SortedList();sl["1"]="a";sl.Add("2","a");//SortedList用法,会自动根据key进行排序&nbsp;<br />
　foreach(DictionaryEntry&nbsp;abc&nbsp;in&nbsp;sl)&nbsp;//遍历SortedList的办法&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　ConnStr=@"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source=c:\abc.mdb";//连接ACCESS数据库,注意加了个@&nbsp;<br />
　ConnStr="Server=127.0.0.1;DataBase=MyDataBase;uid=username;pwd=password";//连接SQL&nbsp;Server数据库&nbsp;<br />
　ConnStr="Provider=SQLOLEDB.1;Server=127.0.0.1;DataBase=MyDataBase;Initial&nbsp;Catalog=MyCatalog;uid=username;pwd=password";//用OLEDB连接SQL&nbsp;Server数据库&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
　ConnStr=@"Provider=Microsoft.Jet.OLEDB.4.0;Data&nbsp;Source=c:\abc.mdb";//连接ACCESS数据库,注意加了个@&nbsp;<br />
　OleDbConnection&nbsp;con=new&nbsp;OleDbConnection(connstr);con.Open();con.Close();&nbsp;<br />
　或&nbsp;<br />
　OleDbConnection&nbsp;con=new&nbsp;OleDbConnection();&nbsp;<br />
　con.ConnectionString=ConnStr;con.Open();con.Close();&nbsp;<br />
　------------------------------------------------------------------------------&nbsp;<br />
&nbsp;OleDbConnection&nbsp;con=new&nbsp;OleDbConnection(connstr);&nbsp;<br />
　OleDbCommand&nbsp;dc=new&nbsp;OleDbCommand("select&nbsp;*&nbsp;from&nbsp;employees",con);&nbsp;<br />
　OleDbDataReader&nbsp;dr=null;con.Open();dr=dc.ExecuteReader();&nbsp;<br />
　while(dr.Read()==true)Response.Write(dr["FirstName"]+"&lt;BR&gt;");&nbsp;<br />
　dr.Close();con.Close();//DataReader和Connection要关闭,Command不用&nbsp;<br />
　　//这里不用&nbsp;dr=null,&nbsp;.Net会自动完成,不过加上dr=null会较快的释放内存&nbsp;<br />
　　------------------------------------------------------------------------------&nbsp;<br />
　　&lt;input&nbsp;type=text&nbsp;id="txtHtml"&nbsp;runat=server&nbsp;/&gt;&nbsp;<br />
　　与&nbsp;<br />
　　&lt;asp:textbox&nbsp;id="txtAsp"&nbsp;runat=server&nbsp;/&gt;&nbsp;<br />
　　的区别：&nbsp;<br />
　　1.txtAsp使用OnClick，而txtHtml使用&nbsp;OnServerClick&nbsp;<br />
　　2.txtAsp使用Text来设置和获取值，而txtHtml使用txtHtml.Value来设置和获取值&nbsp;<br />
　　3.&lt;span&nbsp;id="sum"&nbsp;runat=server&nbsp;/&gt;&nbsp;使用InnerText属性来写入。&nbsp;<br />
　　------------------------------------------------------------------------------&nbsp;<br />
<br />
控件：&nbsp;<br />
　　&lt;asp:listbox&nbsp;id="mylist"&nbsp;runat=server&nbsp;rows=6&nbsp;selectionMode="Multiple"&gt;&nbsp;<br />
　　&lt;asp:ListItem&nbsp;Text="a"&nbsp;Selected="true"&nbsp;runat=server&nbsp;/&gt;&nbsp;<br />
　　&lt;/asp:listbox&gt;&nbsp;<br />
　　ArrayList&nbsp;a&nbsp;=&nbsp;new&nbsp;ArrayList();for(int&nbsp;i=0;i&lt;mylist.Items.Count;i++){if(mylist.Items[i].Selected)a.Add(i);}　　&nbsp;<br />
　　&lt;asp:DropDownList&nbsp;id="myddlist"&nbsp;runat=server&gt;没有&nbsp;rows和selectionMode&nbsp;属性　　&nbsp;<br />
　　&lt;asp:CheckBoxList&nbsp;id="cblist"&nbsp;Runat=Server&nbsp;CellPadding=0&nbsp;CellSpacing=0&nbsp;<br />
　　RepeatColumns=3&nbsp;RepeatDirection="Horizontal"或"Vertical"&gt;&nbsp;<br />
　　&lt;asp:ListItem&nbsp;Text="a"&nbsp;Selected="true"&nbsp;runat=server&nbsp;/&gt;&nbsp;<br />
　　&lt;/asp:CheckBoxList&gt;　　&nbsp;<br />
　　&lt;asp:RadioButtonList&nbsp;id="rblist"&nbsp;Runat=Server&nbsp;CellPadding=0&nbsp;CellSpacing=0&nbsp;<br />
　　RepeatColumns=3&nbsp;RepeatDirection="Horizontal"或"Vertical"&gt;&nbsp;　　&nbsp;<br />
　　list.SelectedItem.Text;list.SelectedIndex;list.Items[i].Selected;　　&nbsp;<br />
　　list.Items.Insert(&nbsp;0&nbsp;,&nbsp;new&nbsp;ListItem&nbsp;("全部"&nbsp;,&nbsp;"-1"))&nbsp;;&nbsp;<br />
　　把详细信息add进去之后,最后执行下面两句&nbsp;<br />
　　select_info.Items.Add("choose&nbsp;one&nbsp;department");&nbsp;<br />
　　select_info.SelectedIndex=select_kc.Items.Count-1;<br />
</p>
</div>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/183837.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2008-03-05 09:06 <a href="http://www.blogjava.net/SIDNEY/archive/2008/03/05/183837.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ASP.NET IIS 注册工具</title><link>http://www.blogjava.net/SIDNEY/archive/2007/10/29/156731.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Mon, 29 Oct 2007 09:15:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/10/29/156731.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/156731.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/10/29/156731.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/156731.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/156731.html</trackback:ping><description><![CDATA[<div class="title">ASP.NET IIS 注册工具 (Aspnet_regiis.exe)<!----></div>
<!--content type: DocStudio. Transform: devdiv2mtps.xslt.-->
<div id="mainSection">
<div id="mainBody">
<p>
<p>在一台计算机上并行执行多个 .NET Framework 版本时，映射到 ASP.NET 应用程序的 ASP.NET ISAPI 版本决定了该应用程序所使用的公共语言运行库 (CLR) 版本。使用 ASP.NET IIS 注册工具 (Aspnet_regiis.exe)，管理员或安装程序可以方便地更新 ASP.NET 应用程序的脚本映射，使其指向与该工具关联的 ASP.NET ISAPI 版本。该工具还可以用于显示所有已安装的 ASP.NET 版本的状态，注册与该工具耦合的 ASP.NET 版本，创建客户端脚本目录，以及执行其他配置操作。</p>
<div class="alert">
<table width="100%">
    <tbody>
        <tr>
            <th align="left"><img class="note" alt="Note" src="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h.note(zh-cn,VS.80).gif" />注意</th>
        </tr>
        <tr>
            <td>
            <p>.NET Framework 附带了两个 IIS 注册工具；一个用于标准系统，另一个用于 64 位系统。用于 64 位系统的工具位于 Windows 文件夹下 Microsoft.NET 目录的 Framework64 目录中；例如，C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727 将包含该 IIS 注册工具。</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<div class="section" id="syntaxSection">
<div class="code" id="ctl00_LibFrame_ctl08_other">
<div class="CodeSnippetTitleBar">
<div class="CodeDisplayLanguage"></div>
</div>
<pre class="code" id="ctl00_LibFrame_ctl08other" space="preserve">aspnet_regiis [options]</pre>
</div>
</div>
<div class="MTPS_CollapsibleRegion"><script type="text/Javascript">
var ExpCollDivStr = ExpCollDivStr;
ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl090c76d82,";
var ExpCollImgStr = ExpCollImgStr;
 ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl09img,";
</script><a class="CollapseRegionLink" onclick="ShowHideCollapsibleArea('ctl00_LibFrame_ctl090c76d82','ctl00_LibFrame_ctl09img');return false;" href="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h(VS.80).aspx#"><img class="CollapseRegionImg" id="ctl00_LibFrame_ctl09img" alt="选项" src="http://msdn2.microsoft.com/msdn/Controls/CollapsibleArea/en-us/minus.gif" align="center" />选项</a><br />
<div class="section" id="ctl00_LibFrame_ctl090c76d82" style="display: block">
<div id="ctl00_LibFrame_ctl09"><a name="sectionToggle0">
<div class="labelheading"><strong><!----></strong></div>
<div class="tableSection">
<table width="100%">
    <tbody>
        <tr>
            <th>选项 </th>
            <th>说明 </th>
        </tr>
        <tr>
            <td>
            <p><strong>-c</strong> </p>
            </td>
            <td>
            <p>将 ASP.NET 的客户端脚本（如客户端验证脚本）安装到每个 Internet 信息服务 (IIS) 站点目录的 aspnet_client 子目录中。</p>
            <p>只安装与 Aspnet_regiis.exe 关联的 ASP.NET 版本的客户端脚本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-disable</strong> </p>
            </td>
            <td>
            <p>在 IIS 安全控制台中禁用 ASP.NET。</p>
            <p>此选项只能与 <strong>-i</strong>、<strong>-ir</strong> 或 <strong>-r</strong> 选项结合使用。此选项不能在 IIS&nbsp;6.0 之前的 IIS 版本中使用。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-e</strong> </p>
            </td>
            <td>
            <p>从每个 IIS 站点目录的 aspnet_client 子目录中移除 ASP.NET 的客户端脚本。</p>
            <p>只移除与 Aspnet_regiis.exe 关联的 ASP.NET 版本的客户端脚本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-ea</strong> </p>
            </td>
            <td>
            <p>从每个 IIS 站点目录的 aspnet_client 子目录中移除所有 ASP.NET 版本的客户端脚本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-enable</strong> </p>
            </td>
            <td>
            <p>在 IIS 安全控制台中启用 ASP.NET。</p>
            <p>此选项只能与 <strong>-i</strong>、<strong>-ir</strong> 或 <strong>-r</strong> 选项结合使用。此选项不能在 IIS&nbsp;6.0 之前或 ASP.NET 2.0 版之前的版本中使用。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-ga</strong>&nbsp;<span class="parameter">user</span></p>
            </td>
            <td>
            <p>向指定用户授予 ASP.NET. 使用的 IIS 元数据库和其他目录的访问权限。</p>
            <p>此选项不能在 ASP.NET&nbsp;2.0 之前的版本中使用。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-i</strong> </p>
            </td>
            <td>
            <p>安装与 Aspnet_regiis.exe 关联的 ASP.NET 版本，并更新 IIS 元数据库根目录和根目录下的脚本映射。</p>
            <p>只更新使用早期 ASP.NET 版本的应用程序的脚本映射。使用新版本的应用程序不受影响。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-ir</strong> </p>
            </td>
            <td>
            <p>安装与 Aspnet_regiis.exe 关联的 ASP.NET 版本，并仅在 IIS 中注册 ASP.NET。 </p>
            <p>此选项不更新脚本映射。若要安装 ASP.NET 并更新脚本映射，请使用 <strong>-i</strong> 选项。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-k</strong>&nbsp;<span class="parameter">path</span></p>
            </td>
            <td>
            <p>在指定的应用程序根路径及其子目录中，从所有 ASP.NET 应用程序中移除所有 ASP.NET 版本的脚本映射。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-kn</strong>&nbsp;<span class="parameter">path</span></p>
            </td>
            <td>
            <p>仅在指定的应用程序根路径中，从 ASP.NET 应用程序中移除所有 ASP.NET 版本的脚本映射。</p>
            <p>此选项不影响指定 <span class="parameter">path</span> 的子目录中的应用程序。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-lk</strong> </p>
            </td>
            <td>
            <p>列出包含 ASP.NET 脚本映射的所有 IIS 元数据库项的路径和版本。</p>
            <p>不显示从父项继承 ASP.NET 脚本映射的项。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-lv</strong> </p>
            </td>
            <td>
            <p>列出计算机上安装的所有 ASP.NET 版本的状态和安装路径。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-norestart</strong> </p>
            </td>
            <td>
            <p>禁止在安装或更新 ASP.NET 脚本映射后重新启动 IIS 辅助进程。</p>
            <p>如果将手动重新启动 IIS 辅助进程，则将此选项与 <strong>-i</strong> 或 <strong>-r</strong> 选项一起使用。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-r</strong> </p>
            </td>
            <td>
            <p>更新 IIS 元数据库中及其下面的所有脚本映射，使其指向与 Aspnet_regiis.exe 关联的 ASP.NET ISAPI 版本。 </p>
            <p>无论当前版本如何，都会更新现有的所有脚本映射，使其指向与 ASP.NET IIS 注册工具关联的 ASP.NET ISAPI 版本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-s</strong>&nbsp;<span class="parameter">path</span></p>
            </td>
            <td>
            <p>将脚本映射（该脚本映射指向与 Aspnet_regiis.exe 关联的 ASP.NET ISAPI 版本）安装到指定应用程序根路径及其子目录下的所有 ASP.NET 应用程序中。更新指定的路径中及其下面使用早期 ASP.NET ISAPI 版本的所有现有脚本映射。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-sn</strong>&nbsp;<span class="parameter">path</span></p>
            </td>
            <td>
            <p>将脚本映射（该脚本映射指向与该工具关联的 ASP.NET ISAPI 版本）安装到指定应用程序根路径下的 ASP.NET 应用程序中。更新指定路径中使用早期 ASP.NET ISAPI 版本的所有现有脚本映射。</p>
            <p>此选项不影响 <span class="parameter">path</span> 的子目录中的应用程序。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-u</strong> </p>
            </td>
            <td>
            <p>从计算机中卸载与 ASP.NET IIS 注册工具关联的 ASP.NET 版本。此 ASP.NET ISAPI 版本的现有脚本映射自动重新映射到其余已安装的 ASP.NET ISAPI 的最新版本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-ua</strong> </p>
            </td>
            <td>
            <p>从计算机中卸载所有 ASP.NET 版本。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-?</strong> </p>
            </td>
            <td>
            <p>显示 ASP.NET IIS 注册工具的命令语法和选项。</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<h3 class="subHeading">配置选项</h3>
<div class="subSection">
<div class="labelheading"><strong><!----></strong></div>
<div class="tableSection">
<table width="100%">
    <tbody>
        <tr>
            <th>选项 </th>
            <th>说明 </th>
        </tr>
        <tr>
            <td>
            <p><strong>-config+</strong> </p>
            </td>
            <td>
            <p>允许对计算机上的 ASP.NET 配置进行远程访问。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-config-</strong> </p>
            </td>
            <td>
            <p>禁止对计算机上的 ASP.NET 配置进行远程访问。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pa</strong>&nbsp;<span class="parameter">container account</span></p>
            </td>
            <td>
            <p>为指定用户或组 <span class="parameter">account</span> 授予访问指定项 <span class="parameter">container</span> 的权限。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将默认的计算机容器替换为用户指定的容器。</p>
                <li>
                <p><strong>-csp</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的容器提供程序。</p>
                <li>
                <p><strong>-full</strong>&nbsp;&nbsp;&nbsp;指定应该添加完全访问权限而不是默认的只读访问权限。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pc</strong>&nbsp;<span class="parameter">container</span></p>
            </td>
            <td>
            <p>在指定容器中创建 RSA 公钥/私钥对。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-size</strong>&nbsp;<span class="parameter">keySize</span>&nbsp;&nbsp;&nbsp;指定密钥大小。默认值为 1024 字节。</p>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将计算机上的默认密钥容器替换为用户指定的容器。</p>
                <li>
                <p><strong>-exp</strong>&nbsp;&nbsp;&nbsp;指定必须可以导出的私钥。</p>
                <li>
                <p><strong>-csp</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的容器提供程序。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pd</strong>&nbsp;<span class="parameter">section</span></p>
            </td>
            <td>
            <p>对配置节进行解密。此参数采用下面的可选参数：</p>
            <ul>
                <li>
                <p><strong>-app</strong>&nbsp;<span class="parameter">virtualPath</span>&nbsp;&nbsp;&nbsp;指定应该在包含路径的级别进行解密。</p>
                <li>
                <p><strong>-location</strong>&nbsp;<span class="parameter">subPath</span>&nbsp;&nbsp;&nbsp;指定要解密的子目录。</p>
                <li>
                <p><strong>-pkm</strong>&nbsp;&nbsp;&nbsp;指定应该对 Machine.config 而非 Web.config 文件进行解密。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pdf</strong>&nbsp;<span class="parameter">section webApplicationDirectory</span></p>
            </td>
            <td>
            <p>对指定物理（非虚拟）目录中的 Web.config 文件的指定配置节进行解密。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pe</strong>&nbsp;<span class="parameter">section</span></p>
            </td>
            <td>
            <p>对指定的配置节进行加密。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-prov</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的加密提供程序。</p>
                <li>
                <p><strong>-app</strong>&nbsp;<span class="parameter">virtualPath</span>&nbsp;&nbsp;&nbsp;&nbsp;指定应该在包含路径的级别进行加密。</p>
                <li>
                <p><strong>-location</strong>&nbsp;<span class="parameter">subPath</span>&nbsp;&nbsp;&nbsp;指定要加密的子目录。</p>
                <li>
                <p><strong>-pkm</strong>&nbsp;&nbsp;&nbsp;指定应该对 Machine.config 而非 Web.config 文件进行加密。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pef</strong>&nbsp;<span class="parameter">section webApplicationDirectory</span></p>
            </td>
            <td>
            <p>对指定物理（非虚拟）目录中的 Web.config 文件的指定配置节进行加密。</p>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pi</strong>&nbsp;<span class="parameter">container file</span></p>
            </td>
            <td>
            <p>将 RSA 公钥/私钥对从指定的 XML <span class="parameter">file</span> 导入指定的 <span class="parameter">container</span>。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将默认的计算机容器替换为用户指定的容器。</p>
                <li>
                <p><strong>-exp</strong>&nbsp;&nbsp;&nbsp;指定可以导出私钥。</p>
                <li>
                <p><strong>-csp</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的容器提供程序。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pr</strong>&nbsp;<span class="parameter">container account</span></p>
            </td>
            <td>
            <p>移除指定的用户或组 <span class="parameter">account</span> 对指定的项 <span class="parameter">container</span> 的访问权限。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将默认的计算机容器替换为用户指定的容器。</p>
                <li>
                <p><strong>-csp</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的容器提供程序。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-px</strong>&nbsp;<span class="parameter">container file</span></p>
            </td>
            <td>
            <p>将 RSA 公钥/私钥对从指定的容器导入指定的 XML 文件。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将默认的计算机容器替换为用户指定的容器。</p>
                <li>
                <p><strong>-csp</strong>&nbsp;<span class="parameter">provider</span>&nbsp;&nbsp;&nbsp;指定要使用的容器提供程序。</p>
                </li>
            </ul>
            </td>
        </tr>
        <tr>
            <td>
            <p><strong>-pz</strong>&nbsp;<span class="parameter">container</span></p>
            </td>
            <td>
            <p>删除指定的密钥容器。此参数采用下面的可选修饰符：</p>
            <ul>
                <li>
                <p><strong>-pku</strong>&nbsp;&nbsp;&nbsp;将默认的计算机容器替换为用户指定的容器。</p>
                </li>
            </ul>
            </td>
        </tr>
    </tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="MTPS_CollapsibleRegion"><script type="text/Javascript">
var ExpCollDivStr = ExpCollDivStr;
ExpCollDivStr = ExpCollDivStr + "ctl00_LibFrame_ctl10ad4898e,";
var ExpCollImgStr = ExpCollImgStr;
 ExpCollImgStr = ExpCollImgStr + "ctl00_LibFrame_ctl10img,";
</script><a class="CollapseRegionLink" onclick="ShowHideCollapsibleArea('ctl00_LibFrame_ctl10ad4898e','ctl00_LibFrame_ctl10img');return false;" href="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h(VS.80).aspx#"><img class="CollapseRegionImg" id="ctl00_LibFrame_ctl10img" alt="备注" src="http://msdn2.microsoft.com/msdn/Controls/CollapsibleArea/en-us/minus.gif" align="center" />备注</a><br />
<div class="section" id="ctl00_LibFrame_ctl10ad4898e" style="display: block">
<div id="ctl00_LibFrame_ctl10"><a name="remarksToggle">
<p>当在一台计算机上安装了多个 ASP.NET 版本时，就说 ASP.NET 是并行运行的。在此安装中，Internet 信息服务 (IIS) 需要知道哪个 ASP.NET ISAPI (aspnet_isapi.dll) 版本应该处理 ASP.NET 应用程序中的页。与 ASP.NET 应用程序关联的 ASP.NET ISAPI 版本决定了该应用程序使用的 CLR 版本。在 IIS 中，ASP.NET 应用程序通过脚本映射与 ASP.NET ISAPI 版本关联。为了简化 ASP.NET 应用程序的配置过程，每个 ASP.NET 版本都附带了一个链接的 Aspnet_regiis.exe 版本。</p>
<div class="alert">
<table width="100%">
    <tbody>
        <tr>
            <th align="left"><img class="note" alt="Note" src="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h.note(zh-cn,VS.80).gif" />注意</th>
        </tr>
        <tr>
            <td>
            <p>每个 .NET Framework 版本都附带一个唯一的 Aspnet_regiis.exe 版本。因为该工具的每个版本只应用于与它关联的 .NET Framework 版本，所以务必使用该工具的正确版本对 ASP.NET 应用程序进行配置。 </p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>ASP.NET IIS 注册工具通常与 <strong>-s</strong> 或 <strong>-sn</strong> 选项结合使用，以便将 ASP.NET 应用程序重新映射到与该应用程序关联的 .NET Framework 版本。使用 <strong>-s</strong> 选项，可以更新指定根路径及其所有子目录中的应用程序。如果不需要更新子目录中的应用程序，请使用 <strong>-sn</strong> 选项。若要同时更新计算机上现有的全部 ASP.NET 应用程序的脚本映射，请使用 <strong>-r</strong> 选项。 </p>
<div class="alert">
<table width="100%">
    <tbody>
        <tr>
            <th align="left"><img class="note" alt="Note" src="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h.note(zh-cn,VS.80).gif" />注意</th>
        </tr>
        <tr>
            <td>
            <p><span class="parameter">path</span> 参数引用的是应用程序的根路径，而不是物理路径。例如 <tt>W3SVC/1/ROOT/SampleApp1</tt>。</p>
            </td>
        </tr>
    </tbody>
</table>
</div>
<p>相反，通过使用 <strong>-k</strong> 或 <strong>-kn</strong> 选项并指定应用程序的根路径，可以使用 ASP.NET IIS 注册工具从该应用程序中移除所有 ASP.NET 版本的脚本映射。如果指定的根路径从父根路径继承它的脚本映射，<strong>-k</strong> 和 <strong>-kn</strong> 选项将无效。 </p>
<p>ASP.NET IIS 注册工具还可以用于安装和卸载 ASP.NET 的链接版本。使用 <strong>-i</strong> 选项，可以安装 ASP.NET，还可以更新所有现有 ASP.NET 应用程序的脚本映射。使用 <strong>-ir</strong> 选项，可以安装 ASP.NET，但不更新脚本映射。若要卸载与该工具关联的 ASP.NET 版本，请使用 <strong>-u</strong> 选项。如果要从计算机中卸载所有 ASP.NET 版本，请使用 <strong>-ua</strong> 选项。</p>
<p>另外，可以使用 ASP.NET IIS 注册工具查看有关 ASP.NET 的信息。若要列出计算机上安装的所有 ASP.NET 版本的状态和安装路径，请使用 <strong>-lv</strong> 选项。如果要查看映射 ASP.NET 的所有 IIS 元数据库项的路径，请使用 <strong>-lk</strong> 选项。</p>
<p>使用 Aspnet_regiis.exe，可以安装和移除客户端脚本，如客户端验证。若要将与该工具关联的 ASP.NET 版本的客户端脚本安装到每个 IIS 站点目录的 Aspnet_client 子目录中，请使用 <strong>-c</strong> 选项。若要只移除与该工具关联的 ASP.NET 版本的客户端脚本，请使用 <strong>-e</strong> 选项。若要移除已安装的所有 ASP.NET 版本的客户端脚本，请使用 <strong>-ea</strong> 选项。</p>
<p>有关在 ASP.NET 中并行执行的更多信息，请参见 <a onclick="javascript:Track('ctl00_LibFrame_ctl10|ctl00_LibFrame_ctl11',this);" href="http://msdn2.microsoft.com/zh-cn/library/t7604sb9(VS.80).aspx">ASP.NET 中的并行 (Side-by-Side) 支持</a>。有关脚本映射和应用程序根路径的更多信息，请参见 <a onclick="javascript:Track('ctl00_LibFrame_ctl10|ctl00_LibFrame_ctl12',this);" href="http://www.microsoft.com/windowsserver2003/iis/default.mspx">http://www.microsoft.com/WindowsServer2003/iis/default.mspx</a> 上有关 IIS 的文档。 </p>
</div>
</div>
</div>
</div>
</div>
<p><br />
<a href="http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h(VS.80).aspx">http://msdn2.microsoft.com/zh-cn/library/k6h9cz8h(VS.80).aspx</a> <br />
<br />
</p>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/156731.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-10-29 17:15 <a href="http://www.blogjava.net/SIDNEY/archive/2007/10/29/156731.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SQL2005 SSIS-在脚本组件中访问包变量</title><link>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152787.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Sun, 14 Oct 2007 12:49:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152787.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/152787.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152787.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/152787.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/152787.html</trackback:ping><description><![CDATA[<p>要想在脚本组件中访问包变量，首先必须设置脚本组件2个属性的值,如下<br />
ReadOnlyVariables<br />
ReadWriteVariables<br />
这2值指定了哪些变量可以访问，哪些变量可以改写（如有多个变量则用逗号分隔），如果你没有指定上面2个属性的值，则不能在脚本组件的代码中访问包变量</p>
<p>下面我举一个从文件中加载内容到包变量的一个例子<br />
&nbsp;1、首先我们定义2个变量 FileName 和 FileContents ，并指定其类型为 String<br />
&nbsp;2、拖曳一个脚本组件到控制面板上，并设置 ReadOnlyVariables和ReadWriteVariables 属性的值分别为 FileName 、FileContents<br />
&nbsp;3、设计脚本组件的代码，如下&nbsp;<br />
&nbsp;</p>
<p>&nbsp;Public Sub Main()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim errorInfo As String = ""<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim Contents As String = ""<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Contents = GetFileContents(Dts.Variables("FileName").Value, errorInfo)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; If errorInfo.Length &gt; 0 Then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(errorInfo, MsgBoxStyle.Critical, "Error")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dts.TaskResult = Dts.Results.Failure<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; MsgBox(Contents, MsgBoxStyle.OKOnly, "File contents")<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dts.Variables("FileContents").Value=Contents<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dts.TaskResult = Dts.Results.Success<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End If<br />
&nbsp;&nbsp;End Sub</p>
<p>&nbsp;Public Function GetFileContents(ByVal filePath As String, Optional ByVal ErrorInfo As String = "") As String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim strContents As String<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Dim objReader As StreamReader<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Try<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objReader = New StreamReader(filePath)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strContents = objReader.ReadToEnd()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; objReader.Close()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Return strContents<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Catch Ex As Exception<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ErrorInfo = Ex.Message<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; End Try<br />
&nbsp;&nbsp;&nbsp; End Function</p>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/152787.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-10-14 20:49 <a href="http://www.blogjava.net/SIDNEY/archive/2007/10/14/152787.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何向 SQL Server 2005 Integration Services 包中添加一个递增计数器通过数据流任务中使用脚本组件</title><link>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152786.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Sun, 14 Oct 2007 12:48:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152786.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/152786.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/10/14/152786.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/152786.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/152786.html</trackback:ping><description><![CDATA[<h2 class="subTitle" id="tocHeadRef">INTRODUCTION</h2>
<script type="text/javascript">loadTOCNode(1, 'summary');</script>
<div class="sbody">通过 BusinessIntelligenceDevelopmentStudio, 创建 Microsoft SQL Server 2005 Integration Services (SSIS) 包时数据流的任意时刻添加一个递增计数器通过数据流任务中使用脚本组件。<br />
<br />
例如， 可能需要具有每行数据源后插入一个递增计数器。 然后, 您可以录制和标识的行成功加载和重定向， 未加载行数。 如果只有兴趣最终计数, 可用于行计数转换添加计数器。 使用脚本组件来添加计数器和使用行计数转换来添加计数器区别是：
<table class="list ul">
    <tbody>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">作为新列值在每行一个脚本组件添加到数据流您一个增量值。</td>
        </tr>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">A 行计数转换添加并更新到单个用户定义变量当前计数器值。</td>
        </tr>
    </tbody>
</table>
<p class="topOfPage"><a href="http://support.microsoft.com/kb/908460/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif" />回到顶端</a></p>
</div>
<h2 class="subTitle" id="tocHeadRef">更多信息</h2>
<script type="text/javascript">loadTOCNode(1, 'moreinformation');</script>
<div class="sbody">要通过在数据流任务, 使用脚本组件添加一个递增计数器请按照下列步骤：
<table class="list ol">
    <tbody>
        <tr>
            <td class="number">1.</td>
            <td class="text">在 控制流 选项卡, 双击创建数据流任务。 数据流 选项卡出现。</td>
        </tr>
        <tr>
            <td class="number">2.</td>
            <td class="text">在工具箱窗口, 双击 脚本组件 。</td>
        </tr>
        <tr>
            <td class="number">3.</td>
            <td class="text">选择脚本组件类型 对话框中, 单击 转换 , 并单击 确定 以预配置组件作为转换。</td>
        </tr>
        <tr>
            <td class="number">4.</td>
            <td class="text">连接器从数据流量源添至脚本组件, 右击数据流量源, 然后单击 添加路径 。</td>
        </tr>
        <tr>
            <td class="number">5.</td>
            <td class="text">要从脚本添加连接器组件以数据流动目标， 右击脚本组件, 然后单击 添加路径 。</td>
        </tr>
        <tr>
            <td class="number">6.</td>
            <td class="text">双击脚本组件。 出现 脚本转换编辑器 对话框。</td>
        </tr>
        <tr>
            <td class="number">7.</td>
            <td class="text">单击左窗格中 输入和输出传递 ， 双击中间窗格, 中 输出 0 依次 输出列 。</td>
        </tr>
        <tr>
            <td class="number">8.</td>
            <td class="text">添加列 , 单击， 然后添加新列名 mycount 。 </td>
        </tr>
        <tr>
            <td class="number">9.</td>
            <td class="text">在左窗格中, 单击 脚本 ， 然后单击 设计脚本 。 当出现新 Microsoft Visual Studio for Applications 窗口, 将下列代码粘贴到窗口。 <code>
            <pre class="code">Imports System
            Imports System.Data
            Imports System.Math
            Imports Microsoft.SqlServer.Dts.Pipeline.Wrapper
            Imports Microsoft.SqlServer.Dts.Runtime.Wrapper
            Public Class ScriptMain
            Inherits UserComponent
            Dim counter As Integer = 0  ' User code
            Public Overrides Sub Input0_ProcessInputRow(ByVal Row As Input0Buffer)
            '
            ' Add your code here
            Row.mycount = counter   ' User code
            counter = counter + 1   ' User code
            '
            End Sub
            End Class</pre>
            </code></td>
        </tr>
        <tr>
            <td class="number">10.</td>
            <td class="text">在 脚本转换编辑器 对话框中, 单击 确定 。</td>
        </tr>
    </tbody>
</table>
当您完成这些步骤, 作为数据流量目的中列使用 mycount 列。 您可扩展功能的示例代码以添加更多信息。 例如, 添加 ExecutionInstanceGuid 系统变量或时间和日期戳。<br />
<br />
<strong>注意 </strong>： <strong>mycount </strong>列， 添加反映脚本组件中处理行顺序。 <strong>mycount </strong>列不一定反映原始源中实际行号。 数据流, 中其他转换后插入脚本组件时尤其如此因为脚本组件可能筛选数据或重定向行之前所有数据流对象。
<p class="topOfPage"><a href="http://support.microsoft.com/kb/908460/zh-cn#top"><img alt="" src="http://support.microsoft.com/library/images/support/en-us/uparrow.gif" />回到顶端</a></p>
</div>
<h2 class="subTitle" id="tocHeadRef">参考</h2>
<script type="text/javascript">loadTOCNode(1, 'references');</script>
<div class="sbody">有关详细信息, 请参阅 SQL Server 2005 联机图书中下列主题：
<table class="list ul">
    <tbody>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">SQLServer 集成服务 (SSIS)</td>
        </tr>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">脚本组件</td>
        </tr>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">配置脚本组件</td>
        </tr>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">编码和测试脚本组件</td>
        </tr>
        <tr>
            <td class="bullet">&#8226;</td>
            <td class="text">行计数转换</td>
        </tr>
    </tbody>
</table>
</div>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/152786.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-10-14 20:48 <a href="http://www.blogjava.net/SIDNEY/archive/2007/10/14/152786.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSIS中ExecuteSQL TASK组件     选择自 AnyJack 的 Blog </title><link>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148682.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Thu, 27 Sep 2007 06:03:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148682.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/148682.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/148682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/148682.html</trackback:ping><description><![CDATA[<span id="ArticleContent1_ArticleContent1_lblContent">&nbsp;
<p>SSIS中ExecuteSQL TASK组件<br />
基于2005 CTP 4月版</p>
<p>在此文中将让你明白ExecuteSQL task组件在SSIS中的功能和作用，我将介绍下面内容：<br />
&nbsp;&nbsp;关于任务<br />
&nbsp;&nbsp;关于任务的属性<br />
看完这些介绍后我将举出下面例子：<br />
&nbsp;从一个有2个输入参数的SQL查询中返回一个简单的值<br />
&nbsp;从一个SQL查询中返回一个记录集<br />
&nbsp;执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数<br />
&nbsp;从SQL查询中返回XML<br />
&nbsp;从一个变量中执行SQL句子<br />
&nbsp;从一个文件中执行SQL句子</p>
<p>关于任务：<br />
&nbsp;我们可以从下图中找到ExecuteSQL TASK组件<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/WhereToFindTheTask.jpg" /><br />
&nbsp;现在我们拖曳它在设计器上，可以看出它会提示你&#8220;当前组件没有指定连接&#8221;，如图<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/InitialDrop.jpg" /><br />
&nbsp;我们可以很容易的给它指定连接，双击它，如图<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/ConnectionTypes.jpg" /><br />
&nbsp;这样我们可以选择不同的连接类型<br />
&nbsp;和2000的DTS不同，SSIS有能力把XML作为结果集返回，如图<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/Resultsettypesdisplayed.jpg" /><br />
&nbsp;然后你可以指定你要执行SQL的来源类型，比如是直接输入还是来自文件还是变量<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/SourceTypeForQuery.jpg" /><br />
&nbsp;如果是来源是直接输入的话，你可以输入SQL语句在 SQLStatement 属性中（点击旁边的省略号弹出输入窗口）<br />
&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Tour/SQLQueryEditor.jpg" /><br />
&nbsp;<br />
任务的常见属性说明&nbsp;<br />
&nbsp;BypassPrepare<br />
&nbsp;&nbsp;是否在在发送到连接前分析SQL句子<br />
&nbsp;Connection<br />
&nbsp;&nbsp;指定执行SQL的连接<br />
&nbsp;DelayValidation&nbsp;&nbsp;<br />
&nbsp;&nbsp;是否延迟验证SQL的有效性，如果使用了只有在当前任务中产生的表（或其他对象）的话，则可启用当前属性<br />
&nbsp;Description<br />
&nbsp;&nbsp;中文描述<br />
&nbsp;Disable<br />
&nbsp;&nbsp;是否禁止当前任务<br />
&nbsp;DisableEventHandlers<br />
&nbsp;&nbsp;是否禁止事件触发<br />
&nbsp;ExecValueVariable<br />
&nbsp;&nbsp;如果任务来源为变量的话，则需要设置该属性<br />
&nbsp;Expressions<br />
&nbsp;&nbsp;用于给某些属性设置一个动态的表达式，这样可以使任务更加灵活，如图<br />
&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Properties/PropertyExpressions.jpg" /><br />
&nbsp;FailPackageOnFailure<br />
&nbsp;&nbsp;是否设置如果当前任务执行故障则整个包执行失败<br />
&nbsp;FailParentOnFailure<br />
&nbsp;&nbsp;是否设置如果当前任务执行故障则其父容器执行失败<br />
&nbsp;IsolationLevel<br />
&nbsp;&nbsp;事务隔离级别<br />
&nbsp;IsStoredProcedure<br />
&nbsp;&nbsp;是否为存储过程<br />
&nbsp;TimeOut<br />
&nbsp;&nbsp;超时设置</p>
<p>使用例子<br />
&nbsp;&nbsp;1、从一个有2个输入参数的SQL查询中返回一个简单的值&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;首先我们要添加一些变量到包中，并为这些变量指定初始值，如图<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ParametersSet.jpg" /><br />
&nbsp;&nbsp;&nbsp;CountOfEmployees 为输出参数<br />
&nbsp;&nbsp;&nbsp;EndDate 和StartDate 为输入参数<br />
&nbsp;&nbsp;&nbsp;在上图中你可以看得定义的变量有一个作用范围，父容器定义的变量子可以使用，反之不行（可以把包看出容器）<br />
&nbsp;&nbsp;&nbsp;确定了变量后，我们需要为任务指定连接<br />
&nbsp;&nbsp;&nbsp;然后我们选择SQLSourceType 属性为直接输入，然后在SQLStatement属性中输入如下句子，并指定返回结果为简单行<br />
&nbsp;&nbsp;&nbsp;&nbsp;SELECT COUNT(*) AS CountOfEmployees FROM HumanResources.Employee WHERE (HireDate BETWEEN ? AND ?)<br />
&nbsp;&nbsp;&nbsp;设置后的结果如图<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ShowStatement.jpg" /><br />
&nbsp;&nbsp;&nbsp;现在把指定的输入参数映射到变量，如图<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ParamMap.jpg" />&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;然后把SQL产生的输出也映射到变量，如图<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1ResultSet.jpg" /><br />
&nbsp;&nbsp;&nbsp;OK，就这样，第一个例子完成了，调试运行把，&nbsp;可以看得下面的结果<br />
&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex1/Example1WatchWindow.jpg" /><br />
&nbsp;&nbsp;&nbsp;看到了么，CountOfEmployees 变量的值由初始的0变成了2<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;2、返回一个记录集<br />
&nbsp;&nbsp;&nbsp;这个例子中我们将返回一个记录集到一个变量（rsProducts），没有输入参数，有个返回的是一个记录集，故变量的类型需定义为object类型，初始值当然也为system.object了，如图<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex2/VariablesExample2.jpg" /><br />
&nbsp;&nbsp;&nbsp;然后在SQLStatement 属性中输入如下SELECT语句返回一个记录集，并指定返回结果为记录集<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ShowStatement.jpg" /><br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ResultsetOnGeneralTab.jpg" /><br />
&nbsp;&nbsp;&nbsp;之后当然也是参数映射了，如图<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2ResultsetMap.jpg" /><br />
&nbsp;&nbsp;&nbsp;好了，运行调试把，我们将看得结果集被作用一个COM对象返回<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex2/Example2WatchWindow.jpg" /><br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;3、执行一个存储过程并接收一个记录集、返回值、输出参数和传送一个输入参数&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;在这个例子中，我们将需要4个变量，一个为返回值，一个为输入，一个为输出，一个为记录集，我们将输入如下SQL句子<br />
&nbsp;&nbsp;&nbsp;EXEC ?=dbo.sp_showAccountinCity ?,?output<br />
&nbsp;&nbsp;&nbsp;然后进行参数映射，如图<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex3/Example3ParamMap.jpg" /><br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex3/Example3ResultSet.jpg" /><br />
&nbsp;&nbsp;&nbsp;可以看出上面操作是非常简单，比2000的DTS强多了<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;4、从SQL查询中返回XML<br />
&nbsp;&nbsp;&nbsp;从SQL中返回XML其实也大同小异，只需要稍微改一下即可<br />
&nbsp;&nbsp;&nbsp;首先变量的类型依然是object,然后只需指定返回类型为XML即可<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;5、从一个变量中执行SQL句子<br />
&nbsp;&nbsp;&nbsp;这也非常简单，首先定义一个变量，如user::statemenet,其为字符型，如图<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex5/Example5ParametersSet.jpg" /><br />
&nbsp;&nbsp;&nbsp;然后设置SQL来源类型为变量，在SQLStatement属性输入 user::statemenet即可<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex5/Example5ShowStatement.jpg" /><br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;6、从一个文件中执行SQL句子&nbsp;<br />
&nbsp;&nbsp;&nbsp;基本上同5差不多<br />
&nbsp;&nbsp;&nbsp;但首先应该建立一个文件类型的来源<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex6/Example6FileSetup.jpg" /><br />
&nbsp;&nbsp;&nbsp;然后指定SQL来源类型为文件，然后指定文件来源就行了<br />
&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.sqlis.com/images/ExecuteSQLTask/Ex6/Example6ShowStatement.jpg" /><br />
总结<br />
&nbsp;好了，就写到此了，希望你能够喜欢<br />
&nbsp;该文的英文来源于 http://www.sqlis.com/default.aspx?58<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;</p>
</span><br />
<div style="font-size: 14px; line-height: 25px"><strong>作者Blog：</strong><a id="ArticleContent1_ArticleContent1_AuthorBlogLink" href="http://blog.csdn.net/AnyJack/" target="_blank">http://blog.csdn.net/AnyJack/</a></div>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/148682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-09-27 14:03 <a href="http://www.blogjava.net/SIDNEY/archive/2007/09/27/148682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>SSIS处理导入数据时, 存在的更新, 不存在的插入</title><link>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148522.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Thu, 27 Sep 2007 01:56:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148522.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/148522.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/09/27/148522.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/148522.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/148522.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 当你把数据从其他数据库, 或者是文本文件之类的其他数据源导入到目的数据库时, 有时希望在导入的处理中, 能够实现"数据存在时更新, 不存在时导入" 在之前, 一般是通过导入临时表, 然后再判断处理导入正式表的, 在SQL Server 2005中, SSIS可以在导入处理时直接完成这种处理 问题描述:当你把数据从其他数据库, 或者是文本文件之类的其他数据源导入到目的数据库时...&nbsp;&nbsp;<a href='http://www.blogjava.net/SIDNEY/archive/2007/09/27/148522.html'>阅读全文</a><img src ="http://www.blogjava.net/SIDNEY/aggbug/148522.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-09-27 09:56 <a href="http://www.blogjava.net/SIDNEY/archive/2007/09/27/148522.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Visual Studio 2005 Team System: Microsoft Solutions Framework</title><link>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107091.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Wed, 28 Mar 2007 15:32:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107091.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/107091.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/107091.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/107091.html</trackback:ping><description><![CDATA[
		<h1>发布日期： 6/23/2005<span class="datePipe"> | </span>更新日期： 6/23/2005</h1>
		<div class="overview">
				<p>Visual Studio Team System<br />Microsoft Corporation</p>
				<p>适用于：</p>
				<p>Microsoft Visual Studio® 2005 Team System</p>
				<p>
						<strong>摘要</strong>：Microsoft Solutions Framework (MSF) 是一个流程指导的集成系统，它包括既灵活又正式的方法，并提供一个为各种各样的项目实现自定义解决方案的框架。</p>
				<p>
						<strong>注</strong> 本文档于产品投入生产之前编写，因此您可能会发现这里所包含的细节与发布的产品有不一致的地方。文中的信息均依据撰写本文时的产品状况，仅供您在规划时参考。如有更改，恕不另行通知。Microsoft 拥有本文档中的主题所涉及的专利、专利应用程序、商标、版权或其他的知识产权。除非 Microsoft 以任何书面许可协议明确提供，向您提供本文档并没给予您使用这些专利、商标、版权或其他知识产权的任何许可证。</p>
		</div>
		<center>
				<img title="" height="6" alt="*" src="http://img.microsoft.com/library/gallery/templates/MNP2.Common/images/3squares.gif" width="30" border="0" />
		</center>
		<div style="HEIGHT: 18px">
		</div>
		<h5 style="PADDING-TOP: 2px">本页内容</h5>
		<table style="MARGIN-TOP: 7px; MARGIN-BOTTOM: 12px" cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EDC">
												<img height="9" alt="简介" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EDC">简介</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ELD">
												<img height="9" alt="MSF 简史" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ELD">MSF 简史</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ESD">
												<img height="9" alt="传统的方法" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ESD">传统的方法</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EAE">
												<img height="9" alt="从传统方法得到的教训" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EAE">从传统方法得到的教训</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ELE">
												<img height="9" alt="我们的解决方案：利用得到的教训" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#ELE">我们的解决方案：利用得到的教训</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EZE">
												<img height="9" alt="扩展可能性" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EZE">扩展可能性</a>
								</td>
						</tr>
						<tr valign="top">
								<td>
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EWF">
												<img height="9" alt="小结" hspace="4" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_down.gif" width="7" vspace="2" border="0" />
										</a>
								</td>
								<td class="onThisPage">
										<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#EWF">小结</a>
								</td>
						</tr>
				</tbody>
		</table>
		<a name="EDC">
		</a>
		<h2>简介</h2>
		<p>Microsoft Solutions Framework (MSF) 是一个将软件开发流程、原则和公认的做法完全集成的集合，并可以高度自定义和高度扩展，它旨在需要时能随时随地为用户提供他们希望获得的指导类型。MSF 内外兼收 Microsoft 的公认指导，并与 Visual Studio 2005 Team System 携手共同为软件开发生命周期 (SDLC) 内的流程自动化和指导提供无缝的体验。本文对 MSF 4.0 进行介绍并简要说明了它的发展历史，同时讨论了传统方法在执行作为 SDLC 的一部分的流程指导时存在的问题，此外，还与 MSF 中正在采取的方法进行了对比，并提出了一些扩展可能性。 </p>
		<div style="WIDTH: 450px">
				<img height="200" alt="" src="http://www.microsoft.com/china/msdn/library/langtool/vsts/art/vsts-msf-fig01.gif" width="450" border="0" />
				<br />
				<p class="figureCaption">
						<strong>图</strong>
						<strong> 1. MSF </strong>
						<strong>与</strong>
						<strong> Visual Studio 2005 Team System </strong>
						<strong>交互的方式</strong>
				</p>
				<div class="figureRule">
				</div>
		</div>
		<p>MSF 为改进应用程序开发提供了一套可自定义、可扩展的软件开发指导。MSF 包括既灵活又正式的方法，允许用户选择最适合的途径。采用 MSF 灵活的框架可以满足任何项目的需要，同时不必考虑项目的大小与复杂性。MSF 的理念表明：没有一个单独结构或流程可以非常好地适用于所有项目的需求和环境。它还认识到指导存在的必要性。MSF 提供本指导不带有强加说明性的详细信息，并允许用户自定义所提供的内容。MSF 组件可以独立应用，也可以一起应用以提高很多类型项目的成功率。</p>
		<p>MSF 的远景目标是为软件专业人员提供由软件专业人员开发的高效、集成和可扩展的流程指导。 </p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>
												<strong>高效：</strong>MSF 的一个关键远景目标是提高人们的工作效率。MSF 的流线型和自定义的流程指导表示，提供对高效性的支持。利用清单和指导（而不是详细的内容），用户可以迅速确定完成一项任务或活动的需求。 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>
												<strong>集成：</strong>通过整套工具的无缝集成、以及帮助和 MSF 内容的集成，在工具内即可提供解决方案和指导。所有这些元素均可轻松地在 MSDN 及整个工具集的所有方面进行更新。可以对内容本身进行组织，以实现轻松维护。 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>
												<strong>可扩展：</strong>流程指导和帮助在 MSF 内是完全自定义的。用户可以选择一个灵活或正式的方法，整合基于方案的开发，并通过内容确定他们自己的路径。 </p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>MSF 指导关注的是对“人与流程”的管理。因为软件开发小组的需要和做法在不断发展，所以收集到 MSF 中的材料也同步进行不断地更改和扩展。另外，MSF 与 Microsoft Operations Framework (MOF) 相互配合，从而为操作环境提供平稳过渡，这是长期项目成功的要求。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="ELD">
		</a>
		<h2>MSF 简史</h2>
		<p>MSF 的元素基于众所周知的业界最佳做法，并融入了 Microsoft 在高科技行业超过 25 年的经验。将这些元素设计为协同工作，以帮助 Microsoft 顾问、合作伙伴和客户解决在整个技术生命周期中遇到的许多重大挑战。</p>
		<p>1994 年，作为 Microsoft 产品开发成果和 Microsoft 咨询服务工作的最佳做法的松散集合，MSF 被首次引入。从那时起，MSF 就植根于 Microsoft 内部来源（例如，Microsoft 开发团队、Patterns &amp; Practices 组、Trustworthy Computing、Microsoft Operations Framework 和 Engineering Excellence 组）的成功且实际的最佳做法而不断发展。外部来源在 Microsoft 开发 MSF 的过程中也起到了重要作用。MSF 合作伙伴委员会 (MSF Partner Council) 的加入对确定 MSF 的方向起到了关键作用。MSF 合作伙伴委员会由全球服务集成商（例如，Accenture、Avanade、Capgemini、EDS、Fjuitsu、Infosys 和 Unisys）组成。其他外部来源也影响着 MSF 的未来，这些外部来源包括 Borland、Merrill Lynch、The Agile Alliance 和 The Software Engineering Institute。</p>
		<p>MSF 使用这个实际最佳做法池（它已得到 Microsoft 内外的验证），并对其进行简化、合并和验证，以便合作伙伴和客户可以更加轻松地理解并采用。MSF 现在是一个健壮且成熟的框架，它由 Microsoft 内部一个专门的产品团队管理和开发，并受到国际顾问委员会主题专家的指导和评审。MSF 也继续利用当前的 Microsoft 经验。Microsoft 不同业务方向的其他团队也经常在内部创建、查找和共享最佳做法和工具。团队从这些内部项目成果学到的东西可以通过 MSF 合并，并分发到 Microsoft 之外。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="ESD">
		</a>
		<h2>传统的方法</h2>
		<p>流程的两个理念和两个方法</p>
		<p>在过去的几年中，软件社区中流程的方法发展成两个基本理念。两种方法都有相对的优点和缺点。另外，流程的两个独立方法在更大的业务环境内得到了发展，一个与软件行业无关，而另一个则试图创建以软件为中心的流程。</p>
		<p>灵活流程模型</p>
		<p>灵活流程模型是由一个名为 Agile Alliance 的软件专业人员团体创建的，他们拒绝接受流程比人重要的观念。灵活流程模型获得了成功，但这种方法遭受的主要非议是：它的成就可能更多地取决于相关个体的天赋，而不是该流程模型的效力。</p>
		<p>正式流程模型</p>
		<p>正式流程模型是在业务环境（大部分在软件开发文化之外）得到发展的。正式方法提供一个公认的框架，但是当应用于 SDLC 时，它会变得很麻烦、很糟糕，可能无法最终产生响应市场并及时交付的高质量软件。</p>
		<p>两种方法：独立于软件，与软件相关联 </p>
		<p>除了上述两种流程模型之外，开发 SDLC 流程的两种方法也得到了发展。一种方法开发独立于软件行业需求的流程，并创立了“一种流程应对所有行业 (one process fits all industries)”的指导。这种流程与软件开发相分离，深深依赖于发布的文本和方法。许多软件专业人员的反应是，问道：“这怎么能适用于我和我的项目呢？”</p>
		<p>对创建与软件开发相关的流程的尝试也已经步入到台前。虽然现有的打包流程解决了与 SDLC 相关的问题，但软件专业人员发现它常常提供太多的信息，以致很难为“实际”软件开发所理解并适应。</p>
		<p>对于软件专业人员，流程指导最重要的元素是，能够在正确的时间即时提供与工具支持集成组合在一起的正确指导。流程指导的制定是 MSF 的焦点所在，它是 SDLC 中的日常活动密不可分的部分。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="EAE">
		</a>
		<h2>从传统方法得到的教训</h2>
		<p>项目经理经常抱怨流程培训费用高昂，而且方法不好掌握。当前这种使用现有工具将流程指导合并到 SDLC 的方法，导致了指导经常与帮助和工具本身产生分离。另外，对于用户来说，映射整个内容的路线不明显。</p>
		<p>铺天盖地的内容</p>
		<p>现有解决方案中所提供的内容可能不合适、过时且又铺天盖地。目前，这样的内容采用的是“掩埋”法。对于所提供的数量巨大的内容，需由用户对其进行分类，并从中挑选出与特定项目有关的内容。虽然这种掩埋法试图让每个人满意，但最终却无人为之喝彩，原因在于它时而灵活，时而却很笨拙。另外，现有的打包流程指导不容易更新。这经常导致工具帮助、模板和指导之间不匹配。</p>
		<p>自定义没有用或不直观</p>
		<p>SDLC 流程自定义的尝试难以取得最佳效果。自定义需要首先使用指导，而为自定义提供的示例不够充分且实际使用价值不大。这经常导致指导一经自定义就无法识别。</p>
		<p>在现有的打包流程指导中，用户没有自始至终感受到一致的整体体验。要使自定义的流程进入有用的系统，用户经常需要做大量的工作。其结果是，静态流程经常没有随着项目技术与环境的变化而变化。这种静态流程很快就会变得过时，因此也就没有用处。另外，这种自定义流程仅仅相当于一组 Web 页。与选定的工具集相集成采取的是一种特定页面形式，这种页面专门在流程的上下文中使用软件开发工具或部署环境。它很少考虑到流程和工具集之间的所有交互。人们使用这个工具时，必须切换到浏览器去寻找适当的主题。其结果是有断开连接的感觉。</p>
		<p>相比之下，流程和工具的和谐统一注定 MSF 有一个高效且集成的方法。在 MSF 中，每个操作都会在流程上下文中捕获到。对某些衡量标准（例如，实际工作与计划工作、测试覆盖与错误修复、代码变动与代码稳定性）可以自动跟踪，无需进行任何额外的工作。数据会作为日常活动的一部分加以收集。流程需要的、在以前很难进行的任务，现在因 MSF 而变得很简单、不显眼、无需费力。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="ELE">
		</a>
		<h2>我们的解决方案：利用得到的教训</h2>
		<p>MSF 包括了从以前尝试中得到的重要发现，以便使软件开发流程正式化，以及合并流程指导。其结果是使 Microsoft 的最佳做法、外部参与者的技术专长和这些重要发现的组合，成为一个可按需提供适当且有用的指导的框架。融入到 MSF 远景目标的一些重要教训包括：为维护而设计的内容、一个清楚的元模型、一个清楚的插件模型和许多贯穿整个内容的导航路径。</p>
		<p>为维护而组织的内容</p>
		<p>MSF 被设计成能够按照主观意愿有效地更新内容。可以轻松地在 MSDN 及整个工具集的所有元素中更新内容。这种同时更新模板、指导和工具帮助的功能，确保了流程指导的所有方面均相匹配。这使得用户在广泛使用该集成指导程序包时工作效率更高。</p>
		<p>清晰的元模型</p>
		<p>MSF 由一个拱形元模型控制。这个框架确定如何将流程指导呈现给用户，并确保它以一致的方式显示。使用该元模型，用户可以轻松地确定他们需要的指导类型，以及项目要求的复杂程度。一旦用户选择了一种指导类型和复杂程度，MSF 就可以及时、快速地提供适当的指导。</p>
		<p>清晰的插件模型</p>
		<p>MSF 提供一种清晰的方式来自定义和“插入”内容。一旦用户选择了流程指导的类型和复杂程度，MSF 提供的内容就可以“按原样”使用，或者对其进行自定义以满足用户和项目的特定需要。在 MSF 中，示例内容非常强大而且是相关的，从而给用户一个坚实的基础，以便于从中构建高质量的流程指导。 </p>
		<p>众多导航路径</p>
		<p>MSF 提供的不只是一个贯穿流程指导的导航路径，而是各种各样的路径，它们会随着用户决定的改变而改变。根据用户的需要，MSF 可以提供十分详细的“即购即用 (out of the box)”的流程指导，或者较为基本的清单（可以根据项目的要求对这些清单进行自定义）。每次用户访问 Visual Studio 2005 Team System 中可用的集成工具时，都可以选择他们期望在流程指导中拥有的详细程度和自定义级别。</p>
		<p>通过吸取所得到的教训并利用 Microsoft 的内外资源，Visual Studio 2005 Team System 中的流程集成以一种前所未有的方式为软件专业人员提供解决方案。 </p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="EZE">
		</a>
		<h2>扩展可能性</h2>
		<p>有了 MSF，流程就不仅仅是文档。它也证明了自身是一个真正的工具行为变革。如果您在项目开始时选择流程，则您还选择了工作流和工作产品，而这些将驱动系统的行为方式。对 SDLC 流程的支持是内置的，这有助于为工作流提供无缝支持。通过将流程集成到团队成员日常使用的工具中，MSF 降低了采用流程的门槛，从而可以自动收集跨功能的项目衡量标准，而无需与手动报告有关的开销。MSF 的下列元素可以自定义： </p>
		<table cellspacing="0" cellpadding="0" border="0">
				<tbody>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>流程指导 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>迭代结构 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>进入条件和退出条件视图 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>工作项类型定义和规则（活动和工作产品） </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>工作项查询 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>源代码签入策略 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>角色群集和安全组 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>文档模板（Excel 和 Word） </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>Microsoft 项目模板 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>报告 </p>
								</td>
						</tr>
						<tr>
								<td class="listBullet" valign="top">•</td>
								<td class="listItem">
										<p>项目门户/SharePoint 站点模板 </p>
								</td>
						</tr>
				</tbody>
		</table>
		<p>MSF 使用方法模板来定义各个项目所遵循的流程。没有一个通用的流程对所有组织甚至一个组织中的所有项目都有效。为了解决这个问题，MSF 提供一个灵活的工具集，它可以使用既灵活又正式的流程。Microsoft 的 Global Solution Integrator 合作伙伴提供他们自己的产品可用的方法模板，您也可以创建自己的方法模板。流程扩展性允许自定义工作项类型、签入策略、自定义报告和项目管理模板。</p>
		<div style="MARGIN-TOP: 3px; MARGIN-BOTTOM: 10px">
				<a href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">
						<img height="9" alt="返回页首" src="http://www.microsoft.com/library/gallery/templates/MNP2.Common/images/arrow_px_up.gif" width="7" border="0" />
				</a>
				<a class="topOfPage" href="http://www.microsoft.com/china/msdn/library/langtool/vsts/dnvsentvstsmsf.mspx#top">返回页首</a>
		</div>
		<a name="EWF">
		</a>
		<h2>小结</h2>
		<p>通过在正确的时间为正确的人提供正确的流程，MSF 为软件开发提供了更好的流程指导。基于来自 Microsoft 内部来源和合格的外部来源的成功、实际的最佳做法，MSF 避免了以前试图使软件开发流程正式化的缺陷，并且融入了成功的元素。MSF 解决方案为高效、集成和可扩展的流程指导提供了一个框架，同时提供了一个可以使用既灵活又正式的流程的灵活工具集。</p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=662023</p>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/107091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-03-28 23:32 <a href="http://www.blogjava.net/SIDNEY/archive/2007/03/28/107091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>白话MSF</title><link>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107088.html</link><dc:creator>渠上月</dc:creator><author>渠上月</author><pubDate>Wed, 28 Mar 2007 15:27:00 GMT</pubDate><guid>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107088.html</guid><wfw:comment>http://www.blogjava.net/SIDNEY/comments/107088.html</wfw:comment><comments>http://www.blogjava.net/SIDNEY/archive/2007/03/28/107088.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/SIDNEY/comments/commentRss/107088.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/SIDNEY/services/trackbacks/107088.html</trackback:ping><description><![CDATA[
		<div>
				<font size="4">
						<font face="Georgia">
								<strong>1.1     简介<br /></strong>MSF 就是微软推荐的做软件的方法。</font>
				</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">简史：</font>
		</div>
		<div>
				<font face="Georgia" size="4">1994年，基于微软产品开发的经验和教训以及微软微软咨询服务的业务经验，微软推出了Microsoft? 解决方案框架 Microsoft Solution Framework (MSF)。当时的MSF只是这些经验教训的松散集合。在以后的几年中，MSF 进一步吸收了微软各个部门和微软的合作伙伴在实际项目中的经验，在2002年，随着Visual Studio.Net 的发布，微软发布了一系列关于MSF 3.0的白皮书，针对MSF 3.0 的大规模培训也在中国开始。</font>
		</div>
		<div>
				<font face="Georgia" size="4">2006年，MSF 4.0 随着Visual Studio Team Foundation 2005 发布。它增加了不少敏捷开发的内容，并且明确刻画了团队典型的流程和在新的团队协作软件包VSTS 中的应用。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">我们可以不用管MSF 演化的细节，要记住所有模式都不是一成不变的，关键是要掌握变化的原因。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font size="4">
						<font face="Georgia">
								<strong>1.2     基本原则<br /></strong>MSF 的核心有八个基本原则：</font>
				</font>
		</div>
		<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
				<p dir="ltr">
						<font face="Georgia" size="4">推动开放的沟通 <br />为共同的前景而工作 <br />充分授权和信任 <br />各司其职，对项目共同负责 <br />重视商业价值 <br />保持敏捷，预期变化 <br />质量投资 <br />学习所有的经验</font>
				</p>
		</blockquote>
		<p dir="ltr">
				<br />
				<font size="4">
						<font face="Georgia">
								<strong>1.2.1    推动开放的沟通<br /></strong>用大白话说，就是所有信息都保留，并公开，讨论要包括所有方面，决定要公开，并通知所有人。当然，牵涉到技术保密，安全性等信息要有必要的保护措施。</font>
				</font>
		</p>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">问：我们以前都是“老板让你知道，你就会知道，别多问，看起来比较好控制吧？”</font>
		</div>
		<div>
				<font face="Georgia" size="4">答：以前大家两三个哥们一起鼓捣软件，大家都知根知底，好像没有意识到“沟通”的重要性，但是随着项目复杂度和团队规模的增加，没有开放的沟通是万万不行的。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">问：如果有一些事情，我个人也没拿准是不是要通知某一方面的人员，怎么办？</font>
		</div>
		<div>
				<font face="Georgia" size="4">答：在这种情况下，宁愿过分沟通。另外，在TFS中，所有和项目有关的信息都会保存起来。</font>
		</div>
		<div>
				<font face="Georgia" size="4">例如：</font>
		</div>
		<div>
				<font face="Georgia" size="4">所有工作件及其历史，</font>
		</div>
		<div>
				<font face="Georgia" size="4">所有源代码的修改记录</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">一个经常问的问题是：在TFS中，我为什么不能删除工作项？</font>
		</div>
		<div>
				<font face="Georgia" size="4">答案很简单 – MSF 的第一原则：所有的信息都保留，并公开。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">大牛：有人犯了一些比较愚蠢的错误，TFS把它们都记录下来了，从个人角度，有人会说“我知道我做错了，已经改正，那最好把原来的记录删除了吧”，这样做，不是有利于打造和谐的团队么？</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">阿超：记录留下来，可以做事后分析，给后来的同事，或者别的项目的同事学习。如果删除，那也就违反了第八条原理“学习所有的经验”。我们公司要建立“对事不对人”的文化，好像有一句古话，把人的错误比做日食。。。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">我们以前关于项目的好多事，都装在几个头头的肚子里，最开放的，也不过是把一些问题列在EXCEL 文件中，但是也没有历史记录，看不到所有信息，那么项目进度以及项目中存在的各种问题就不能及时让所有人知道，这样MSF中其他的原则也就不能实行了。没有开放的信息，也就谈不上“授权”，或“建立清晰的责任和共同的职责”，“保持灵巧，预测变化”。这也是为什么“推动开放的沟通”是第一个基本原则。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
		<div>
				<font face="Georgia" size="4">MSF 团队模型和MSF过程模型也是建立在“开放的沟通”原则上。</font>
		</div>
		<div>
				<font face="Georgia" size="4">
				</font> </div>
<img src ="http://www.blogjava.net/SIDNEY/aggbug/107088.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/SIDNEY/" target="_blank">渠上月</a> 2007-03-28 23:27 <a href="http://www.blogjava.net/SIDNEY/archive/2007/03/28/107088.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>