2012-02-03 94 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); 
相关问题