2012-02-03 82 views
2

我試圖讓我們的應用程序處理不同的圖標集(使其具有可換膚功能)。我問了通常的做法here。當我試圖從答案中應用解決方案時,我用.resx文件中的所有硬編碼圖標路徑替換爲使用環境變量的路徑。例如,我取代...避免.resx文件中的硬編碼圖標文件路徑

<data name="btnDel" type="System.Resources.ResXFileRef, System.Windows.Forms"> 
    <value>..\..\Icons\btnDel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> 
</data> 

...與:

<data name="btnDel" type="System.Resources.ResXFileRef, System.Windows.Forms"> 
    <value>$(IconsFolder)\btnDel.png;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value> 
</data> 

然後,作爲初始測試中,我所定義的系統級的環境變量稱爲IconsFolder,施加變化,重新啓動的視覺工作室,並試圖建立。但我得到這個錯誤:

D:\SVN.DRA.WorkingCopy\UserControl\My Project\Resources.resx(123,5): error MSB3103: Invalid Resx file. Could not find a part of the path 'D:\SVN.DRA.WorkingCopy\UserControl\My Project\$(IconsFolder)\btnDel.png'. Line 123, position 5. 

看起來像.resx文件不理解環境變量。那麼我怎樣才能避免硬編碼這些路徑呢?

編輯:每個圖標可以被多個項目引用,因此任何機制的環境變量用於配置路徑必須在解決方案範圍內可用,我應該能夠設置它從一個MSBuild腳本中。

編輯2:我所有的形式在C#中定義或VB.NET項目

回答

0

的全系統的環境變量可能無法正常工作。你可能會想嘗試這裏的操作說明:

http://msdn.microsoft.com/en-us/library/ms173406.aspx

+0

這些說明似乎只適用於Visual C++項目。我忘了提及它,但我所有的表單都是VB.NET和C#項目,它們在屬性 - >調試下沒有任何環境選項 – 2012-02-03 17:51:15

0

我不認爲有一種方法使用資源文件來實現。實現此目的的一種方法是在您的項目上放置位圖,右鍵單擊它並將構建操作更改爲「嵌入式資源」。在文本編輯器中打開項目文件並將路徑更改爲環境變量。 (這是我們如何使用VS 2008來實現的,從那時起它們變得更容易)。然後在代碼中,你可以做到這一點....

Assembly myAssembly = Assembly.GetExecutingAssembly(); 
Stream myStream = myAssembly.GetManifestResourceStream("btnDel.png"); 
new System.Drawing.Bitmap(myStream);