避免使用.resx文件中的硬编码图标文件路径

时间:2012-02-03 17:35:17

标签: winforms msbuild resx visual-studio-2010-sp1

我正在尝试让我们的应用程序处理不同的图标集(使其具有skinnable)。我问过通常的做法here。当我尝试从答案中应用解决方案时,我使用环境变量替换了.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的系统级环境变量,应用了更改,重新启动了Visual Studio并尝试构建。但我得到了这个错误:

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项目中定义的

2 个答案:

答案 0 :(得分:0)

系统范围的环境变量可能无效。您可以尝试按照此处的说明进行操作:

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

答案 1 :(得分:0)

我认为没有办法完成资源文件的使用。实现此目的的一种方法是在项目中删除位图,右键单击它并将构建操作更改为“嵌入式资源”#34;。在文本编辑器中打开项目文件,并更改环境变量的路径。 (这就是我们用VS 2008做的事情,从那以后它们变得更容易了)。然后在代码中你可以做到这一点......

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