顯示具有 VS2005 標籤的文章。 顯示所有文章
顯示具有 VS2005 標籤的文章。 顯示所有文章

2013年9月4日 星期三

AnyCPU, x86, x64, ARM

今天終於稍微了解了 AnyCPU的用意了。特地記錄下來,避免記憶體 reset 的老問題。

Visual Studio.NET 2003

在這個年代之前,並沒有64位元的 CPU(應該說不普及)。此時 Visual Studio 並不提供 CPU 相關的選項。回想一下,這是多麼美好的事。

Visual Studio 2005,2008

也才再過個兩年,64 位元的 CPU 開始在伺服器上普遍了起來。到了2007年前後,連桌上電腦也愈來愈普及。為了面對問題,微軟 Visual Studio 2005 開始有了 AnyCPU 的平台目標選項。

image

那到底使用 AnyCPU 的 assembly 會如何的被地行呢?此時的決策是非常簡單,而且看來也十分有效:

當 assembly 使用的是 AnyCPU 平台目標時,且

  • 執行在 32 位元Windows作業系統時,會以 32 位元的方式執行,IL 會被編譯成 x86 的 native code。
  • 執行在 64 位元Windows作業系統時,會以 64 位元的方式執行,IL 會被編譯成 x64 的 native code。

問題

由於目前的64位元電腦 (Windows) 都是32位元相容的,因此一個 assembly 在64位元的電腦只能以 64 位元的方式來執行,恐怕不妙。我常碰到的例子是 Oracle Client。

當我們的存取 Oracle 資料庫的程式以 AnyCPU 編譯後,執行在 64 位元的電腦,會以 64 位元的方式來執行。但如果安裝的 Oracle Client 是32位元的呢?32 位元的 Oracle Client 載入 64 位元的程式,就會拋出 System.BadImageFormatException 例外。

Visual Studio 2010

上面的問題持續了3~4年,到底 32 位元與 64位元應用程式好壞也漸漸地有了較明確的選擇。

除非明確地需要大量的記憶體,或者需要長整數,否則32位元就已經足夠。64位元的效能還會有一些些下降。

因此,在 Visual Studio 2010,建立新專案時,Target Platform(平台目標) 預設就是 x86。
但是,AnyCPU 的assembly 執行方式仍然沒有變。

Visual Studio 2012

到了 Visual Studio 2012又有變化。這個時間點,正巧 ARM CPU (也是32bits)也要進來,因此 32bit === x86 時代正式終結。

Visual Studio 2012 建立新專案後的預設選項為 AnyCPU32BitPreferred。
注意一下, Prefer 32-bit 被 disable 掉,是指不能修改,但在.NET Framework 4.5 就可以設定了!

image

當 assembly 使用的是 AnyCPU 平台目標時,且

  • 執行在 32 位元Windows作業系統時,會以 32 位元的方式執行,IL 會被編譯成 x86 的 native code。
  • 執行在 64 位元Windows作業系統時,會以 64 位元的方式執行,IL 會被編譯成 x64 的 native code。
  • 執行在 ARM Windows作業系統時,會以 32 位元的方式執行,IL 會被編譯成 ARM 的 native code。

因此,Perfer 32-bit 可以說是特地為 ARM 設計的。

結論

AnyCPU 從一開始,到目前其定義仍然沒有變動過。也就是「碰到ppp的作業系統,就執行成ppp的程式」,其中 ppp 可以是 32bit, 64bit, ARM。

改變的是「建立專案時的預設選項」。

也因此,上述 Oracle Client 的問題還是很可能會發生。建議儘可能地明確地指定平台目標(Target Platform),以減少不確定性。

2010年6月18日 星期五

MSBuild 與 DevEnv 的建置結果不相等

使用 TFS Build 了一陣子,發現了 MSBuild 的結果未必與 Visual Studio 2005 建置的結果不同。

故事是這樣的:我使用了下列的指令 rebuild 了一個 solution。

msbuild mySolution.sln /t:rebuild

將該solution 下的某個 webform 專案結果拿到 CAT.NET 下掃描,結果會出現「並未將物件參考設定為物件的執行個體」的錯誤訊息。

image

怎麼會呢?看起來是 CAT.NET 的 bug。

追了好久,改用Visual Studio 2005 內建的指令 devenv 來建置

DevEnv MySolution.sln /rebuild "Release"

建置結果竟然可以了!

只能說 Visual Studio 2005 與 msbuild 的結果可能不一樣。有沒有人知道差別到底在哪裡呢?

在VS2008, VS2010 是否也是相同的狀況呢? 還沒有測試呢!

2010年5月20日 星期四

連接 Visual Studio 2005 到 TFS 2010 的詳細步驟 (中文版)

上次提到了英文版的安裝。那繁體中文版呢?照著上次英文版的連結,下載檔案時改用繁中版的檔案,試著照做一次,會發現狀況不同於英文版,也就是說不work啦!

安裝

  1. 安裝 Visual Studio 2005 CHT
  2. 安裝 Team 總管 2005。
  3. 安裝 Visual Studio 2005 SP1
  4. 安裝 VSTS 2005 相容 2010 套件

注意!步驟2不能使用這裡的連結哦!安裝這個img 檔案,在「新增/移除程式」中看到的是 Team Explorer 2005 - ENU,也就是英文版。所以行不通也。這時只好到 MSDN Subscriptions 下載 Team Foundation Server 2005 繁中版,拿它裡面的Team 總管來安裝中文的 Team 總管 2005。

在安步驟34時,安裝程式會重複安裝兩次。必須讓安裝程式完整地安裝完畢,否則會無法連接 TFS 2010

例如在步驟3,雖然只點擊執行一次,但安裝程式會執行兩次,一次更新步驟1的 VS2005 為 VS2005 sp1,第二次則更新步驟2的 Team Explorer 2005 為Team Explorer 2005 sp1。故會安裝兩次。

相同地,步驟4也會安裝兩次,分別更新 VS2005 sp1 及 Team Explorer sp1,讓這兩個產品得以連接 TFS 2010。

設定

接下來,就可以設定 Team Foundation Server。使用 工具 \  連接到 Team Foundation server…

clip_image002

輸入時,必須輸入 http://tfsServer:8080/tfs/CollectionName 如下的測試範例

clip_image004

如果沒有照順序安裝,則上一步輸入 Url 時,Port number 不會變成 disabled 的狀態。

結論

老外對於繁中版好像愈來愈不照顧了。為了之後開發方便,建議大家之後還是使用英文版來開發,比較不會踩地雷。

20140505

Connecting to TFS from any version of Visual Studio 詳細記載了所有的版本連接方式

2010年5月19日 星期三

連接 Visual Studio 2005 到 TFS 2010 的詳細步驟 (英文版)

前提到了 舊版 Visual Studio (2005, 2008) 連接到 TFS 2010。其中內容太過簡潔。下面則是 VS2005 完整的安裝步驟,順序不能錯誤,否則無法連接到 TFS2010。

安裝
  1. 安裝 Visual Studio 2005
  2. 安裝 Team Explorer 2005
  3. 安裝 Visual Studio 2005 SP1
  4. 安裝 VSTS 2005 相容 2010 套件

注意!在安步驟3及4時,安裝程式會重複安裝兩次。必須讓安裝程式完整地安裝完畢,否則會無法連接 TFS 2010。

例如在步驟3,雖然只點擊執行一次,但安裝程式會執行兩次,一次更新步驟1的 VS2005 為 VS2005 sp1,第二次則更新步驟2的 Team Explorer 2005 為Team Explorer 2005 sp1。故會安裝兩次。

相同地,步驟4也會安裝兩次,分別更新 VS2005 sp1 及 Team Explorer sp1,讓這兩個產品得以連接 TFS 2010。

我在這個地方等太久了,耐不住性子下就冒然取消,之以就無法連接 TFS 2010 了。害我又錯怪了 MS …

設定

接下來,就可以設定 Team Foundation Server。使用 Tools \  Connect to Team Foundation server…

image

輸入時,必須輸入 http://tfsServer:8080/tfs/CollectionName 如下的測試範例

image

如果沒有照順序安裝,則上一步輸入 Url 時,Port number 不會變成 disabled 的狀態。

另外,要強調的是這裡的網址連結都是英文版的哦!繁體中文版的連結不 work!!!! 驚訝吧!

2010年5月14日 星期五

舊版 Visual Studio (2005, 2008) 連接到 TFS 2010

在 Visual Studio 2010 中,Team Explorer 已經是內建的了。換句話來說, Visual Studio 2001 不必安裝其他元件,就可以連接到 TFS 2010。

然而,舊版的 Visual Studio,如  2005 及 2008 要使用 TFS 2010,該怎麼辦呢?

簡單地說,就是安裝新的軟體,以支援連接到 TFS 2010.

VSTS 2008 相容 2010 套件 ( 請升到 SP1 )

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=cf13ea45-d17b-4edc-8e6c-6c5b208ec54d

VSTS 2005 相容 2010 套件 ( 請升到 SP1 )

http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=22215e4c-af6f-4e2f-96df-20e94d762689

後記1

[20100518]雖然微軟出了這兩個套件,但我只試成功了 Visual Studio 2008的部份,見連接 Visual Studio 2008 到 TFS 2010 的詳細步驟。Visual Studio 2005 想要比照辦理,卻試不出來。不知道微軟是不是有測過呢?

後記2

[20100519]試出來了,過程見 連接 Visual Studio 2005 到 TFS 2010 的詳細步驟。我又錯怪了微軟。

2009年10月27日 星期二

Visual Studio 2005 sp1 在 Windows 2003 Server 安裝失敗

最近為了看別人的 code,需要在 Virtual PC 上安裝 Windows 2003 + Visual Studio 2005 + SP1。無奈,一直安裝失敗。

看了一下 event log,我有多種錯誤發生過。

  1. 不允許安裝 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\ZNW1C\VS80sp1-KB926601-X86-ENU.msp,因為軟體限制原則處理中發生一個錯誤。物件無法被信任。
  2. Product: Microsoft Visual Studio 2005 Team Suite - ENU -- The installer has encountered an unexpected error installing this package. This may indicate a problem with this package. The error code is 2755. The arguments are: 1612, C:\WINDOWS\Installer\3617f.msi,
  3. 產品: Microsoft Visual Studio 2005 Team Suite - ENU - 無法安裝更新 'Microsoft Visual Studio 2005 Team Explorer - ENU Service Pack 1 (KB926601)'。錯誤碼是 1603。其他可用資訊在記錄檔案 C:\DOCUME~1\ADMINI~1\LOCALS~1\Temp\VS80sp1-KB926601-X86-ENU\VS80sp1-KB926601-X86-ENU-msi.0.log。
  4. Product: Microsoft SQL Server Native Client -- Error 1706. An installation package for the product Microsoft SQL Server Native Client cannot be found. Try the installation again using a valid copy of the installation package 'sqlncli.msi'.
  5.  

在安裝的過程中,各式各樣的錯誤都可能發生,而且也會發生在不同的安裝階段,有時發生在解壓縮時(如2),有時發生在安裝(如4)。

我記得以前不會啊?看來是新的 windows hot fixes 所造成的。

解法呢?安裝 WindowsServer2003-KB925336-x86-CHT.exe 這個 hot fix 之後重開機,再安裝 Visual Studio 2005 sp1 即可

2008年12月18日 星期四

Print Job Limit 報表次數的限制

第一次使用 Crystal Report ,但在壓力測試時發生了問題。

在每經一段時間後,Web Server 就再也無法吃報表的需求了。

clip_image002

錯誤原因是:載入報表失敗

clip_image004

查到一個 resource http://blog.csdn.net/daisylh/archive/2006/12/12/1439312.aspx ,說明 ReportDocument 記得要 Close(), 所以我就改成如下的程式

      ReportDocument customerReport = new ReportDocument();
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      customerReport.Close();
      customerReport.Dispose();
可惜,沒有用。我發現 ExportToHttpResponse 執行完後,網頁就結束了。下面兩行的 Close() 與 Dispose() 是不會執行的。 改成如下的 using block,就可以了,
      using (ReportDocument customerReport = new ReportDocument()) {
      customerReport.Load(reportFilePath);
      customerReport.SetDataSource(rs);
      ExportOptions exportOpts = new ExportOptions();
      PdfRtfWordFormatOptions pdfOpts = ExportOptions.CreatePdfRtfWordFormatOptions();
      exportOpts.ExportFormatType = ExportFormatType.PortableDocFormat;
      exportOpts.ExportFormatOptions = pdfOpts;
      response.Clear();
      response.Buffer = true;
      response.ContentType = "application/pdf";
      customerReport.ExportToHttpResponse(ExportFormatType.PortableDocFormat,
        response, false, "aaa.pdf");
      }

2008年9月16日 星期二

MSBuild and MSTest

Visual Studio 已經幫我們做了很多事情。但我們希望更進一步地做到組建自動化及測試自動化。

簡單的方法,就是下排程

cd Dir_Containing_Sln_File
msbuild solutionfile.sln /t:Rebuild /p:Configuration=Debug > build-log.txt

cd Dir_Containing_Sln_File
MSTest /testcontainer:testProject1\bin\Debug\test.dll /runconfig:localtestrun.testrunconfig > test-log.txt

2008年9月10日 星期三

DebugView

DebugView 是一個好用的 Debug 軟體。
在程式撰寫時,常常被教導要寫

Debug.Write("My debug inforation");

但是,除了在 Visual Studio 內可以看到 debug info 外,其他似乎一無用處了

在執行 .net 程式之前先啟動 DebugView,就可以看到 debug infomation 了

範例

using System;
using System.Diagnostics;
using System.IO;
using System.Linq;

class Program
{
  static void Main(string[] args)
  {
    for (int i = 0; i < 1000; i++)
    {
      Stopwatch w = new Stopwatch();
      w.Start();
      TestMethod();
      w.Stop();
      Debug.WriteLine(string.Format("count {0} elapsed {1} msec", i, w.ElapsedMilliseconds));
    }
  }

  private static void TestMethod()
  {
    string[] aColl = File.ReadAllLines(@"c:\a.txt");
    string[] bColl = File.ReadAllLines(@"c:\b.txt");

    var q = from a in aColl
            where !bColl.Contains(a)
            select a;

    foreach (var item in q)
    {
      Console.WriteLine(item);
    }
  }
}

結果如下圖
 image

2008/09/16

在Vista 上執行時,若未使用Run as administrator,會出現如下的錯誤

image

此錯誤將導致無法讀取asp.net 的 debug information

另外,除了必須 Run as administrator,也必須勾選 "Capture Global Win32" 這個選項,才能看到 asp.net 的 debug information

image

2008年8月26日 星期二

Asp.net 網站的模組化開發

一直以來,我們都希望開發網站時,能以模組的型式來開發。部署時,只要部署所需要的模組即可。
列如說,asp.net 應用程式Root 能容納多個模組,分別是公告、訂單、發票三個模組。
開發時,四個專案分別開發(包含asp.net應用程式Root及三個模組)
部署時,可以只部署所需要的模組,如 root + 公告,其餘的不要。

其實,方法已經有了。可見 Creating sub-projects in IIS with Web Application Projects
這樣的方式好處是簡單,而且可以分開部署。
可是,如果要談到資料交換(root 與 模組,模組與模組) 的資料交換,就又顯得複雜了。
只能靠 Session 或 database 來交換資料,並不是很好的做法。

目前我知道最好的做法,是 Web Client Software Factory, WCSF。

它不但可以模組與模組之間交換,甚至可以有依賴關係,例如公告模組依賴於權限模組。
並且又加上了 page flow (可取代之前的 User Interface Process (UIP) Application Block),還設計了權限、ObjectContainerDataSource、realtime search
連 source code 都給你了,真是物超所值。

2008年8月13日 星期三

微軟 Visual Studio.NET 2003 的主流支援到 2008/10/14

提醒一下。由於微軟的 mainstream support 策略,使用Visual Studio.NET 2003 的主流支援到 2008/10/14,見這裡

也就是說,除非你自己出錢請微軟修改,否則 Visual Studio.NET 2003 不會再新增功能了。

建議開發新專案時,請使用 Visual Studio 2008,至少主流支援可到 2013 年。

Visual Studio 2005 也可以到 2011

2008年7月31日 星期四

VSTO 2 的部署記錄

之前使用 VS2005 開發了一個 Excel 2003的程式,是使用 VSTO 2.0。
當然在自己的機器開發起來非常的愉快,但一旦要給使用者時,才發現部署起來真的不容易。
我將我的經驗記錄下來,給大家參考。

  1. Client 端之Excel 必須使用 Excel 2003 Professional 版
  2. Client 端必須安裝 vstor (visual studio tool for office runtime)
    http://www.microsoft.com/downloads/details.aspx?FamilyID=f5539a90-dc41-4792-8ef8-f4de62ff1e81&displaylang=zh-tw
  3. 於 Client 機器,打開 cmd, 執行
    gacutil -i "C:\Program Files\Microsoft Office\Office11\Addins\Msosec.dll"
    其中 gacutil.exe 及 gacuti.exe.config 必須從開發機器的 C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin 位置複製到 client machine 來執行
  4. Client 端必須設定security policy,參考HOW TO:在共用位置中授與文件和活頁簿使用權限
    請於Client 機器,打開cmd,並執行下列 script
    cd %systemroot%\Microsoft.NET\Framework\v2.0.50727
    caspol -m -ag "CodeGroupName" -custom "C:\Program Files\Microsoft Office\Office11\Addins\Msosec.xml" FullTrust -n "My Data Documents" -d "descriptions"

    caspol -m -ag LocalIntranet_Zone -url \\servername\folder\* FullTrust -n "CodeGroupName" -d "descripions"

2008年7月25日 星期五

如何在 DataGridView 的 Cell 中使用 DateTimePicker

希望能做到像這樣

image

要怎麼做呢?原來微軟就有 sample 了

How to: Host Controls in Windows Forms DataGridView Cells

2008年4月15日 星期二

VS2005 的字型

Dear All: 您在開發時,VS2005 所使用字型還是 細明體嗎? 我之前都是使用 fixedsys 字型。原因是:預設粗體,字體一般寬。相當適合開發人員。但缺點是在同一畫面可看到的字數目變少了,字型無法放大縮小。 今天知道,微軟有出一個 Consolas Font Pack for Microsoft Visual Studio 2005,字型美化,且可以放大縮小。大家可以參考。 下面一則有介紹 http://blog.sina.com.tw/dotnet/article.php?pbgid=4907&entryid=12586

2008年3月26日 星期三

TransactionScope 之 timeout

發生了在 TransactionScope 內的 transaction timeout Type : System.Transactions.TransactionException, System.Transactions, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : The operation is not valid for the state of the transaction. Source : System.Transactions inner exception : Type : System.TimeoutException, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 Message : Transaction Timeout 解法一:TransactionScope ts = new TransactionScope(TransactionScopeOption.Required, new TimeSpane(0, 5, 0)) //五分鐘。預設是一分鐘。 解法二:

2008年2月20日 星期三

fire stored procedure and forget

程式撰寫時,有時需要在 aspx 上執行 stored procedure。 但有個 stored procedure 要執行很久,且使用者不太想等太久。那怎辦?

Ado.net 好像沒有一個 ExecuteNoneQueryWithoutWaiting 的指令哦!

�好,SQL Server 2005 有一些功能。

建立一個Job,讓�Job 跑此stored procedure做為第一個 step。 再以 ado.net 執行此 stored procedure 即可。

EXEC msdb.dbo.sp_start_job @job_name = 'JobName'

2007年10月25日 星期四

使用 VSTS 做壓力測試時,設定 storage type 為 SQL

在使用 VSTS 做壓力測試時,需要設定 storage type 為 SQL

指令如下

cd n:\Program Files\Microsoft Visual Studio 8\Common7\IDESQLCMD /S Sql2005dev2 -U sa -P password -i loadtestresultsrepository.sql

2007年9月1日 星期六

CodeFile 與 CodeBehind

在 VS2005 有兩種網站的專案格式,Web Site 與 Web application project Web Site 的 aspx ,使用的是 @Page CodeFile="xxx.aspx.cs" ,此cs由Server 的 asp.net 來負責compilation成 assmebly 後再執行 Web application project 的 aspx,使用的是 @Page CodeBehind="xxx.aspx.cs",此cs 由VS2005來負責compilation成 assembly,部署到server 後,再交由 asp.net 執行

2007年8月9日 星期四

web deployment projects

可於 http://msdn2.microsoft.com/en-US/asp.net/aa336619.aspx 下載。

其功能,相當於使用 aspnet_compiler.exe 及使用 aspnet_merge.exe ,但是有GUI界面。

可惜,我習慣使用 web application project 的模式開發 asp.net。而web deployment projects只適用 web sites

2007年8月6日 星期一

Cannot create/shadow copy 'xxx' when that file already exists.

使用 VS2005 sp1 開發程式時,常常發生如標題的錯誤。 可是,只要再等個30秒,1分鐘,再執行網頁,就可以了。 真是奇怪。 原來,在 vs2005 sp1 上,增加上 copy on write 的技術,可是在xp 上,好像不太管用。 解法: 在 web.config 上設定一下,就可以了 。 不過呢,使用 VS2005 build asp.net 應用程式時,這樣的設定又會出現 vs2003 常見的問題 Error 749 Unable to copy file "obj\Debug\xxx.dll" to "bin\xxx.dll". The process cannot access the file 'bin\BankPro.WEB.EInvoice.dll' because it is being used by another process. EInvoice2 這就了解了為什麼vs2005 sp1有這的設定了

Share with Facebook