星期二, 8月 29, 2006

好書介紹 "深入剖析ASP.NET 元件設計" 與 "使用Microsoft Visual Studio 2005"

最近手邊一直有些書沒有消化完,隨著工作越來越忙,能夠消化的時間也就越來越少。

在這要誠心的介紹二本書
1.深入剖析ASP.NET 元件設計 作者 黃忠成(code6421)

會接觸這本書是因為,在寫一些組件時,對於較深入的功能非常的不瞭解,一個問題常常想破頭也不知道怎麼做,因為根本不夠瞭解所以很多狀況下根本不知道要如何下手。對熊而言這是一本蠻深的書,因為內容包含了許多核心的技術,IDE的互動方式! 要搞懂要搞懂!!

2.使用Microsoft Visual Studio 2005 作者 Craig Skibo, Marc Young, Brian Johnson
這本書主要介紹IDE的操作方式,內容包含從最基本的操作到加強IDE的功能都有詳細的介紹,由書名看起來應是一本很快快樂樂系列的,閱讀中果然覺得自己是快快樂樂的! 因為有太多的"哇.原來這麼方便"。
程式設計師每天接觸最多的就是IDE環境,熟悉他不僅能夠加快效率,也能讓自己更樂在其中。

再分享璉璉的心得@@

萬丈高樓平地起,基礎若沒打好可是會很痛苦的,這二本書若是不推真的是不夠朋友的啦!

星期五, 8月 25, 2006

微軟技術討論區

之前使用delphi時,常上vclxx與ktop,而現在微軟技術討論區是我常去的地方!

在這不僅可以將自己在開發上所遇到的技術問題提出來詢問,也可將開發的甘苦談拿出來與大家做討論。在這在許多自發性的MVP在這義務性的參與回答的工作,所以一個問題被提出來後常常能在很短的時間內得到滿意的解答,而這又是微軟本身的討論區,除了自發性的MVP與網友外,微軟也很鼓勵內部員工參與交流!

而熊因為前陣子也蠻常參與討論與回答,這周還收到 微軟技術推廣 王森經理所送的書與一些很讚的資料! 在這要謝謝 王經理!

參與討論的朋友應先看看公告區,尤其是這一篇,以免造成彼此的困擾!

星期二, 8月 22, 2006

C# Indexers Property

今天在看HashTable的help發現一個很有趣的東西,也就是Indexers! Indexers應是C#的一種概念很像是一個array,雖然之前常常使用,但是卻沒有很認真看待他!

其實只要你在宣告時,使用了保留字"this"都是使用到了此一機制,不論是property,interface,struct都是!他雖然與array很相似,但是本質卻不相同
1.Indexers與function相同,提供多載overloaded
2.Indexers可以使用非數值型態的標示
3.Indexers不可以使用ref或是out方式來當參數的傳遞

下面是一個簡單的例子
public class BearTest
{
 private string[] Data;
 private int Size;
 public BearTest(int Asize)
 {
  this.Size = Asize;
  Data = new string[this.Size];
  for (int i = 0; i < Data.Length; i++)
  {
   Data[i] = string.Empty;
  }
 }

 public string this[int Apos]
 {
  get
  {
   if (Apos >= this.Size)
    throw new ArgumentOutOfRangeException("太大了");
   return Data[Apos];
  }
  set
  {
   if (Apos >= this.Size)
    throw new ArgumentOutOfRangeException("太大了");
   Data[Apos] = value;
  }
 }
}

呼叫
BearTest b = new BearTest(10);
b[0] = "100";
MessageBox.Show(b[0].ToString());

在collection中其實有很多這樣子的例子,不過他有經過了延伸,像是hashtable的key與value即是,以往平常熊都是這樣子用hashtable的

Hashtable hb = new Hashtable();
hb.Add("Bear", "熊");

而今天發現其實可以簡化成
hb["Bear"] = "熊";

前者在add二次Bear時會失敗,但是後者會用不會,會用第二次代換掉第一次的value值,這樣子的寫法也有缺點啦,失去了不可重覆key值的檢查,所以看你程式想要達成什麼功能了。

星期一, 8月 21, 2006

"需要有物件參考才能使用非靜態欄位、方法或屬性"的問題排除

之前在提到即時運算視窗時,會在呼叫非靜靜態方法時出現"需要有物件參考才能使用非靜態欄位、方法或屬性",其實他就是告訴你非static的方法,需要有該物件才可以叫用!

若你在程式中直接使用
public class Test
{
 public static void A()
 {
  B();
 }
 public void B()
 { 
 }
}
你一樣會在編譯時,發生同樣的錯訊,非靜態的方法,一定要透過物件本身去呼叫他
例如
Test t = new Test();
t.B();

由此可以知道上回的命令若要測試~就新增一個靜態的方法如下
static int TestSum(int i1, int i2)
{
 Test t = new Test();
 return t.sum(i1, i2);
}
叫用時直接使用 ? Test.TestSum(1, 2)即可~

星期五, 8月 18, 2006

Lutz Roeder's .NET Reflector的使用方式

Lutz Roeder's .NET Reflector真的是一套很方便的工具,他可以直接查看.NET應用程式中的類別、源始碼等資訊,而呈現的方式蠻多的,有IL, C#, DELPHI, MC++, Visual Basic, Chrome!
如下是執行的畫面。


在這說明幾個功能
1.使用File/Open 可以打開任何.NET的程式,加進來的類別會在左上半部的Treelist中,左下部份會顯示己經點選節點的基本資訊,如程式路徑、名稱等資訊~右半部顯示詳細資訊
2.使用File/Open List可以打開清單工具,裡頭可以儲存多個清單,應付你不同的狀況(專案)的查看清單。
3.Tools/Disassembler(space bar),可以顥示出源始碼,例如類別的定義,程式的結構等等資訊,而此處的源始碼並不是真的是程式中原始碼的樣子,但他還原後的行為模式是與原來相同的。
4.Tools/Analyzer,可以用你選定的類別,直接分析你加入清單中所有.net的程式,例如某一個類別被那些程式使用到,都可以在這輕易分析出來!
5.畫面上的combox可以直接切換分析的語言,當然他也是直接就切換過去了!

雖然Reflector很方便,但卻也很花記憶體,像熊就很習慣把整個devexpress的dll都捉進來~沒事用analyzer連結來連結去,玩沒二下ram就要吃掉200多mb,每回看著swap要用到1g以上,就好想要有2g的ram!

星期四, 8月 17, 2006

FirebirdClient uninstall problem!

After uninstall FirebirdClient for .NET Framework 2.0. You will get "an unexpected error occurred in the .NET Framework Data Provider for Firebird" when you try 'add new connection'.

1.check machine.config
remove
ConfigSections "Firebirdsql.Data.Firebirdclient"
DbProviderFactories "FirebirdClient Data Provider"

2.Delete registry
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataProviders\{92421248-F044-483A-8237-74C7FBC62971}]
@=".NET Framework Data Provider for Firebird"
"DisplayName"="Provider_DisplayName, FirebirdSql.VisualStudio.DataTools.Properties.Resources"
"ShortDisplayName"="Provider_ShortDisplayName, FirebirdSql.VisualStudio.DataTools.Properties.Resources"
"Description"="Provider_Description, FirebirdSql.VisualStudio.DataTools.Properties.Resources"
"FactoryService"="{AEF32AEC-2167-4438-81FF-AE6603341536}"
"InvariantName"="FirebirdSql.Data.FirebirdClient"
"Technology"="{77AB9A9D-78B9-4ba7-91AC-873F5338F1D2}"
"CodeBase"="C:\\Program Files\\FirebirdClient\\FirebirdSql.VisualStudio.DataTools.dll"


[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataProviders\{92421248-F044-483A-8237-74C7FBC62971}\SupportedObjects\DataConnectionProperties]@="FirebirdSql.VisualStudio.DataTools.FbDataConnectionProperties"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataProviders\{92421248-F044-483A-8237-74C7FBC62971}\SupportedObjects\DataConnectionSupport]@="FirebirdSql.VisualStudio.DataTools.FbDataConnectionSupport"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataProviders\{92421248-F044-483A-8237-74C7FBC62971}\SupportedObjects\DataConnectionUIControl]@="FirebirdSql.VisualStudio.DataTools.FbDataConnectionUIControl"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataProviders\{92421248-F044-483A-8237-74C7FBC62971}\SupportedObjects\DataSourceInformation]@="FirebirdSql.VisualStudio.DataTools.FbDataSourceInformation"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\DataSources\{2979569E-416D-4DD8-B06B-EBCB70DE7A4E}]@="Firebird Data Source"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{8d9358ba-ccc9-4169-9fd6-a52b8aee2d50}]@="Firebird Data Package""InprocServer32"="mscoree.dll""Class"="FirebirdSql.VisualStudio.DataTools.DataPackage""CodeBase"="C:\\Program Files\\FirebirdClient\\FirebirdSql.VisualStudio.DataTools.dll"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{8d9358ba-ccc9-4169-9fd6-a52b8aee2d50}\SatelliteDll]"DllName"="FirebirdSql.VisualStudio.DataToolsUI.dll""Path"="C:\\Program Files\\FirebirdClient\\"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Services\{AEF32AEC-2167-4438-81FF-AE6603341536}]@="{8d9358ba-ccc9-4169-9fd6-a52b8aee2d50}""Name"="Firebird Provider Object Factory"

星期五, 8月 11, 2006

.NET的程式原來是那麼的不安全

在剛接觸.NET就常聽人說,.NET的應用程式是非常容易被還原,得到原始程式碼,當時並沒有非常的在意,而最近因為被一套報表工具快搞瘋了,所以也比以常更常使用Lutz Roeder's .Net Reflector,現在幾乎天天都使用來查看xtrareport的結構。而上回在貼出"開發.NET應用程式,必裝的工具"後,自己也花了好幾個晚上把玩那些工具,最先把玩的當然是程式模糊器,試用後發覺Xencode這一套還蠻不錯用的。但他非常的小氣,只有提供14天的試用時間,此時拿出了reflertor查看fox.exe,本想查看他如何判別試用的時間,但發覺他也本身己經被模糊了,一堆數字難以理解。

此時只能隨手試試,依照之前的經驗,想說大半的試用日期是寫在登錄檔中,隨即啟動了regmon設好過濾的條件監視機碼的讀寫狀況,重新啟動fox.exe,隨即過濾了QueryValue的項目,發現有一個最怪異的字串"HKLM\Software\Oak Vale Networks\XFTRL1.0\(Default)",呵刪掉就好了嗎? 再拿到工具中驗證看看。

使用"Oak Vale Networks"search程式,果然看到一個static function,public static bool xb30f5e1eb4806151(string x2d32ac7a8f1f8f5b, TimeSpan x5906905c888d3d98),查看程式碼有調用日期比較,進而查看使用到此function的代碼,

public static bool _xc7c43f12e732db09()
{
 略
 MessageBox.Show(MessageTable.TrialExpired, x77fa6322561797a0.x6886d5a1867d55cb);
 略
}

此時更肯定是此機碼在控管,動手作了它再重進程式YES.還是正常的耶,且此值又被重寫了回來!所以只要試用時間到了,動手去刪除此值,那你可以無限時間試用Xencode! 這樣子算是破解了Xencode嗎? 呵~

星期四, 8月 10, 2006

八月份資訊安全更新 August 9, 2006

此回的更新從MS06-040到MS06-051,這回的更新被微軟強列建議都要更新。

尤其是040,是這回最重要的一個HOTFIX!因為他修補的是,只要攻擊者發送特殊封包到139或是445,那就可能讓你的電腦中標,完全不用使用者去觸發(點選檔案、email)!詳見如下

這回台灣微軟也用livemeet的錄影方式說明這回的更新,這是他首次這麼做,但內容所以有點不是很理想,整個撥放時間大約要1小時,想參考的人可以看看

mms://str501.livemeeting.com/playback-gb2rtcnas002-tree502/212849bc01e350c877dec6bf1fe69ba4?lmauth=1

星期三, 8月 02, 2006

Visual Studio 2005 遇到的錯訊與排除方法

VS2005用了有一段時間了,遇到的狀況一直都沒少過,在這分享幾個遇到問題的解決方式,與一些有趣的錯誤畫面!


1.debug 時出現 Error:LoaderLock was detected,或是你在ide要編緝source code時出現"No symbols are loaded for any call stack frame.The source code cannot be displayed"

解決方式:進到debug option/exceptions/將Managed Debugging Assistants中LoaderLock的勾拿掉

2.打開連線精靈即出現"Value dose not fall within the expected range"


或編寫程式到一半,突然出現"Unexpected error encountered : Unspecified error"

或編譯程式時出現 LC ERROR -532459699

不確定如何出現


解決方式:重開vs

3.最讓我痛恨的..ram被吃光光,恨死了~
Low Memory or possible heap corruption

此時的工作管理員是長這樣子的

由工作管理員中,可以得知,我在run的程式並不多,但pf卻用到了1.3g,而此時保存下來的數據己經是我從工作管理員中,強制砍掉devenv.exe後放了一部份資源的數據,要不然原先的可用實體記憶體己經不到100mb了! 這種狀況一天要遇個好幾次真是累

4.IDE中出現一條線 ,線永遠在那,點不到也不影響你vs其它code的顯示

不想理他,再做我的事,但他竟然出現了一個框

哇哈哈~想說把他拉到邊邊去.不理他,又過了沒多久vs不動了,但框還是可以拉動耶.神奇!

會出現這條線,我猜想是xtrareport造成的殘影..呵.不確定啦.

結論:用vs電腦要夠快..且ram只有1g是非常非常非常非常痛苦的..至少對有用devexpress的專案來說 :(

星期二, 8月 01, 2006

開發.NET應用程式,必裝的工具

MSDN上看到的文章

Ten Must-Have Tools Every Developer Should Download Now
This article discusses:
NUnit to write unit tests
NDoc to create code documentation
NAnt to build your solutions
CodeSmith to generate code
FxCop to police your code
Snippet Compiler to compile small bits of code
Two different switcher tools, the ASP.NET Version Switcher and the Visual Studio .NET Project Converter
Regulator to build regular expressions
.NET Reflector to examine assemblies

另一篇是
C# Programming Tools

全文如下
The C# Team has scoured the Web for other implementations of the CLI, cool object browsers, IDE tricks, add-ins, obfuscators, and other useful tools and utilities that will help you get your job done faster.
Check out the Classes and Libraries page for more links to useful tools, frameworks, and class libraries, including code-generation tools.

Featured Tools
Extreme Optimization Mathematics Library for .NETExtreme Optimization Mathematics Library for .NET includes classes for complex numbers, curves, solving equations, numerical integration, numerical differentiation, vectors, matrices, and various special functions.
devAdvantage : C# Source Code Analyzer for Visual Studio .NETIdentifying issues in code early can result in shorter development cycles and lower project costs by reducing time spent doing code reviews, testing and fixing bugs late in the process. devAdvantage is a Microsoft® Visual Studio® .NET Add-in which automates code reviews by analyzing C# source code looking for bugs and issues.

Libraries and Other Stuff
Visual Guard
Create and manage users' roles and permissions and determine what each user can do, see and modify in any new or existing .NET application without modifying any code.
Sharp Tools Addin
LibCheck
Sharp3D.Math Library
Animated Vector Graphics
AQdevTeam
C-Sharpener For VB
{smartassembly}
SmartInspect
MSINC.Plugins
Visual Studio Spell Check Add-In - StudioSpell

C# Compilers and Frameworks
.NET Framework SDK Downloads
Contains the .NET Framework and runtime, and compilers for C# (and other languages).
Try Visual Studio .NET 2003
Click here for a 60-day trial version of Visual Studio .NET 2003.
Rotor—The Microsoft Shared Source CLI Implementation
Mono
eXtensible C#
DotGnu

Obfuscators
{smartassembly}
Dotfuscator .NET Obfuscator
Decompiler.NET
Deploy.NET
Salamander .NET Obfuscator
Semantic Designs: C# Source Code Obfuscator
Spices.Net
Thinstall
Demeanor for .NET
Xenocode Postbuild 2006
NET Reactor

Decompilers
Dis#
Decompiler.NET
Exemplar/Anakrino
Reflector .NET Decompiler
Salamander .NET Decompiler (C#, C++, Visual Basic .NET, IL, MSIL)
Xenocode Fox 2006

Profiler/Optimization Tools
NCover
NDepend
ANTS Profiler
{smartassembly}
Salamander .NET Decompiler (C#, C++, Visual Basic .NET, IL, MSIL)
.NET Memory Profiler
AQtime .NET Edition 2 - Automated Profiling and Debugging
Compuware DevPartner Studio Professional Edition
Compuware DevPartner Profiler
Allocation Profiler
CoverageEye.NET
NProf
Rational PurifyPlus - Product Overview - IBM Software

Refactoring
C# Refactory
.NET Refactoring Home
dotEASY
devAdvantage : C# Source Code Analyzer for Visual Studio .NET
ReSharper
DocumentatorMacros

Object Browsers
Reflector for .NET
.NET Component Inspector
DotNetSandbox
LSW DotNet-Reflection-Browser

Editors
Antechinus C# Editor
C# for emacs
Improve C# Plugin for Eclipse
CodeObject
Semantic Designs: C# Source Code Formatter

Development Environments (IDEs)
SharpDevelop
PowerToys for Visual Studio .NET 2003

Build Tools
NAnt—A .NET Build Tool
CruiseControl.NET
Atozed Software—FinalBuilder
Visual Build Professional
Hippo.NET
MegaBuild

Standard Verifiers
FxCop
CLRxLint

Testing
TestRunner for NUnit
HarnessIt
POCMock
.NETUnit
NUnit
TestComplete
X-Unity
csunit

Documentation
NDOC—Code Documentation Generator for .NET
SoftSteel C# Tutorial on Documentation
NetDoc
Roland Weigelt's GhostDoc

Database
ADO.NET Express
Data Access Application Block for .NET
DataLG: Generate Assemblies for Visual C# and Visual Basic .NET
DeKlarit
OlyMars

Regular Expressions
GotDotNet User Sample: Regular Expression Workbench (V2.00)
Regular Expression Designer
.NET Regular Expression Repository
Expresso—A Tool for Building and Testing Regular Expressions—.NET