none
VB2010, Resources檔案對於輸出的RELEASE. DEBUG 與 發行(安裝執行)上的差異 RRS feed

  • 問題

  • 大家好,我又來請教各位前輩了

    趁有些時間,來發一下一直存在我內心很久,也希望請前輩幫我導正一下觀念,

    避免自己走火入魔變邪門歪道...^^


    我的背景:VB6後...直接使用VB2010

     

    這問題,基本是因為我覺得我的用法很怪....

    一方面也覺得原計設上應該不是這樣的用法,所以想問個清楚

    以下,就請各為前輩幫我解惑了,

     

    起因:在VB2010裡,因我偶爾用到一些圖片資源,後來也發現物件的Image屬性會把目標對應到Resources資料夾裡

    因此,Image對應的圖檔我也就放在Resources資料夾裡了.


    另外,我很高興VB2010可以輸出EXE檔,可到任何沒安裝VB主程式的電腦上直接執行

    在程式上Release 或 Debug後,於BIN資料夾裡就會有Release 或 Debug資料夾的產生,裡面會有對應的EXE執行檔,

    我查過Release 與 Debug 用法上的差異了...但還不是很懂...Orz!

    因為試了一下,Release也可以發現語法錯誤上的BUG,所以我就直接使用了...


    問題1:直接使用Release好嗎?因為Release也是可以找出語法上的錯誤...所以...?這樣對嗎?

          還是說...例如當使用DEBUG模式...可以找出10條BUG,但用Release的結果有可能會是 小於等於10....
     
          所以大家才都建議先用DEBUG?...是這樣嗎?    

          還是說有什麼正確的步驟?

          一定要先Debug後...才Release..??

          還是說Debug後,也可以不須進行Release,直接使用Debug裡面的執行檔exe也是ok?

     

     


    問題2:

    那在來就是有輸出exe檔分別在Release 與 Debug資料夾裡,

    除了exe之外,還有一些檔案,我擔心有什麼遺漏,所以我是將Release資料夾帶著走,執行時執行裡面的.exe檔

    這用法用了幾次後~再其它的專案輸出檔,發生問題了,圖檔連結失敗!!!!!

    主因就是Release裡面沒有當初放置圖檔的Resources資料夾!!!

    後來我就自作聰明的在Release檔裡增加Resources資料夾,把所有圖檔路徑改到Release\Resources

    因此當我將檔案使用Release作輸出後,將整各Release資料夾帶著走...

    都沒發生什問題了,

    只是,我一直覺得微軟設計這Resources資料夾的用法,我很清楚我用法絕對是錯誤,所以,懇請各位前輩幫我導正觀念!

    另外我載入圖檔的方式 PictureBox1.Image = Image.FromFile("相對路徑")

    這種用法有過時嗎= =?,因為就是感覺跟Resources資料一起配合起來很不順....

    Resources資料夾的用法...到底是?

     

     

    問題3:

    那再來..有個方式 發行功能(安裝執行),可以將輸出的檔案"安裝"到電腦裡...(很像VB6的方式...)

    但是....為什麼發行後...Resources資料夾裡的圖檔完全都沒有,不管是預設的原始路徑,還是我耍了小聰明放到Release\裡面

    都沒有,一整個感覺,比使用Release後的結果更糟...!!

    所以,這發行的功能,到底是怎麼用,還是我又遺漏了什麼?不然就是..我對它的理解!!又錯了Orz


    發行的功能,到底是怎麼用?不管設計什麼樣的程式都能用此方法?

    那...另外,發行功能與Release又有什麼使用上的差異呢?

     

     

    以上...請前輩們多多指教~教我這個快走火入魔的人...導回正途~= =!!! 

     

    2013年6月21日 上午 03:59

解答

  • 1. Debug/Release版都會檢查語法錯誤, 但是DEBUG版的程式會在執行時多做一些檢查, 所以先用DEBUG版執行可以發覺到較多潛在的問題

    2. 請使用部署或發行功能發行/部署應用桯式, 不要直接執行EXE

    3. 因為Resources資料夾的內容己經放入到EXE檔案中了

    • 已標示為解答 魚骨頭 2013年6月25日 上午 06:52
    2013年6月21日 上午 04:22
  • 錯的多就知道問題在哪。

    Debug 主要是搭配錯誤符號檔,當發生錯誤時,可以取得完整錯誤內容,若對方有安裝 VS 的話,甚至可以導入到 VS 去除錯,找到問題回報給你,所以 Debug 版是給開發團隊用的,包含測試者。

    圖檔可以用相對路徑,想要不短路的話,簡單一點就是把 Debug / Release 編譯輸出路徑都改到專案根路徑或是預期輸出的目錄結構,這樣你就可以直接測相對路徑。而 Resources 會編譯到執行檔內,所以 Resources 目錄內不應該自己加入任何檔案,而是讓 VS 自動增減,這樣才會編譯到執行檔。

    發行的問題同 2 ,根本就是你用錯,Resources 本身就不會被封裝,他是給編譯器用的原始內容。

    VS 的 封裝部署 為了彈性更大,反而不如 VB6 的自動,該有啥自己要確認。

    • 已標示為解答 魚骨頭 2013年6月25日 上午 09:21
    2013年6月21日 下午 12:45

所有回覆

  • 1. Debug/Release版都會檢查語法錯誤, 但是DEBUG版的程式會在執行時多做一些檢查, 所以先用DEBUG版執行可以發覺到較多潛在的問題

    2. 請使用部署或發行功能發行/部署應用桯式, 不要直接執行EXE

    3. 因為Resources資料夾的內容己經放入到EXE檔案中了

    • 已標示為解答 魚骨頭 2013年6月25日 上午 06:52
    2013年6月21日 上午 04:22
  • 阿...抱歉~

    關於第3點問題,this前輩可能誤解了我的Resources資料夾了...

    這樣要說好了...我要是使用PictureBox1.Image = Image.FromFile("絕對路徑")的方式載入圖片

    而不用Resources資料夾了的話,那結果就如我說的,不管是Release還是發行封裝的方式

    圖檔並不會直接匯入exe裡,而且我的圖檔不管在哪一台電腦執行

    一定不能忘記備份圖檔到"絕對路徑"下....

    那再來..就是使用安裝的方式,例如要執行10支不一樣的程式就必須在使用的第一次先安裝10支進去

    而且當100支後,我想有安裝過程式都知道,在"程式和功能"會有100條記錄...這讓我覺得很麻煩

    我會說這些,主因是我在幫公司作"產品測試"的程式,因多樣的關係....

    將會有很多人寫好自己負責的產品程式,那我目前是規劃成 用一支主介面的程式(全部產品共用)的exe程式,

    然後依照使用的人員key in相關資料後去呼叫執行個別產品的exe程式,

    所以個別人員可以自行開發自己負責的產品測試程式,

    目前都只完成單一產品的測試程式,還沒使用共用介面程式整合起來~

    所以說~我看到this前輩的告知後~有點慌了,若真的使用發佈的方式比較好的話..那.....

    "程式和功能區"當安裝完100支程式,能否不要看到100支程式的安裝呢或是能折疊起來..像windows的一些更新項目那樣?

    還是說...有什麼好方法..讓我不須用介面共用程式exe來呼叫產品測試程式exe的方式,....

    我以前有在某vb6版問過 exe呼叫exe這個規劃的問題...

    當時有前輩建議我是用狀態機 fsm的方式

    只是我覺得這方式算很高階~不是一般學過程式的人可以容易懂的...

    感覺問題如雪球般的~越滾越大~Orz真的很抱歉~

    請看完後有想法或意見的前輩,麻煩給予指教了....(不許偷懶!!!  XD

    2013年6月21日 上午 10:18
  • 錯的多就知道問題在哪。

    Debug 主要是搭配錯誤符號檔,當發生錯誤時,可以取得完整錯誤內容,若對方有安裝 VS 的話,甚至可以導入到 VS 去除錯,找到問題回報給你,所以 Debug 版是給開發團隊用的,包含測試者。

    圖檔可以用相對路徑,想要不短路的話,簡單一點就是把 Debug / Release 編譯輸出路徑都改到專案根路徑或是預期輸出的目錄結構,這樣你就可以直接測相對路徑。而 Resources 會編譯到執行檔內,所以 Resources 目錄內不應該自己加入任何檔案,而是讓 VS 自動增減,這樣才會編譯到執行檔。

    發行的問題同 2 ,根本就是你用錯,Resources 本身就不會被封裝,他是給編譯器用的原始內容。

    VS 的 封裝部署 為了彈性更大,反而不如 VB6 的自動,該有啥自己要確認。

    • 已標示為解答 魚骨頭 2013年6月25日 上午 09:21
    2013年6月21日 下午 12:45
  • 要用 Image.FromFile("絕對路徑")的方式載入圖片, 可以將圖片的[複製到輸出目錄]屬性的內容值設定成:有更新才複製, 讓欲載入的圖片自動輸出到EXE的輸出資料夾底下, 方便DEBUG或RELEASE程式直接載入
    2013年6月22日 上午 02:39
  • 感謝心冷熱情熄 與tihs 2位前輩的指教

    對於 心冷熱情熄 前輩的部分

    "Debug 主要是搭配錯誤符號檔,當發生錯誤時,可以取得完整錯誤內容,若對方有安裝 VS 的話,甚至可以導入到 VS 去除錯,找到問題回報給你,所以 Debug 版是給開發團隊用的,包含測試者。"

    看著你這樣說,突然感覺到Debug有點深奧了,我試了一下你說的"導入",但..我用一個簡單的程式測試,結果Debug裡就4各檔案,分別為
    .exe  ,.pdb  ,.xml,與 .vshost.exe 4個檔....
    而且,也是要在"建置"成功沒錯誤才會產生,那這樣的結果 使用 f5 (開始偵錯)還會有問題產生嗎?
    我的vb2010是 studio 2010 professional版本,是不是因為版本的問題..所以沒有你說得這個功能呢?

    另外,你說將輸出的目錄路徑改一下,我看完你寫的後,認真查看一下,還真的有改的地方...(真的很抱歉...沒盡到自己義務

    這方面我再試看看,改到怎樣的路徑下對於圖檔使用路徑載入的方式可以用的比較順手,


    那 this 前輩部份

    "可以將圖片的[複製到輸出目錄]屬性的內容值設定成:有更新才複製, 讓欲載入的圖片自動輸出到EXE的輸出資料夾底下"

    我找不到可以設定這屬性的地方,真的很抱歉,能否再告知詳細一點

     

    以上,若各位前輩知道的話,請再給予指教,

    或是我理解上又錯了...請用力鞭策 = =!!!

    2013年6月22日 上午 09:19
  • .pdb 就是錯誤符號檔。

    2013年6月22日 下午 01:11
  • 在[方案總管]視窗中點中圖片檔案, 再到[屬性]視窗設定[複製到輸出目錄]屬性
    2013年6月23日 上午 04:49
  • 感謝心冷熱情熄 與tihs 2位前再度伸出援手~^^

    這問題也到最後關鍵了~容我再問最後一個問題了


    以tihs前輩的告知,我試驗一下所謂的 "複製到輸出目錄"的方式~~結果很OK了^^

    但~我存在一個疑問....就是難道我只能手動去按它屬性然後在去選擇設定為"複製到輸出目錄",只能這樣做嗎?


    我試驗找了一下,例如我要設定  "圖片檔1"的屬性,我可以點選它之後去它的屬性欄找到 "複製到輸出目錄"屬性並將之設為"複製到輸出目錄"

    但我想用程式碼的方式 My.Resources.圖片檔1.XXXX    好像沒這個屬性可以直接設定耶@@?

    看了一下System.Resources 命名空間的MSDN資料,也沒找到可能的?

    是我看漏了?還是找錯方向?還是根本就沒有這功能?

    當圖檔很多的話~要這樣一個一個去設定,可想而知很麻煩的= =!!!

    Form1.Designer.vb 這檔案我也有看了,好似也沒有

    有沒人知道有什麼好方法,還是說就真的只有慢慢一個個去設定的這方法而以?


    請前輩們~再幫我指引一下方向了~3Q~

    2013年6月24日 上午 01:42
  • 已經加入到Resource的圖檔直接從Resource取用即可, 不需要再設定[複製到輸出目錄]屬性
    2013年6月25日 上午 01:25
  • 好吧~謝謝this前輩

    這問題告一段落囉~

    特別感謝this與心冷熱情熄的熱情指導

    我去消化吸收一下了~3q~^^y

    2013年6月25日 上午 06:50