【问题标题】:Avoid hardcoded icon file paths in .resx file避免在 .resx 文件中硬编码图标文件路径
【发布时间】:2012-02-26 07:44:34
【问题描述】:

我正在尝试让我们的应用程序处理不同的图标集(使其具有可换肤性)。我询问了通常的做法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 项目中定义的

【问题讨论】:

    标签: winforms msbuild resx visual-studio-2010


    【解决方案1】:

    系统范围的环境变量可能不起作用。您可能想尝试按照此处的说明进行操作:

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

    【讨论】:

    • 这些说明似乎只适用于 Visual C++ 项目。忘记说了,不过我所有的form都是VB.NET和C#项目,在Properties->Debug下没有任何Environment选项
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-07
      • 2021-09-11
      • 2018-11-19
      • 1970-01-01
      • 1970-01-01
      • 2013-04-04
      • 1970-01-01
      • 2014-08-13
      • 2014-01-11
      相关资源
      最近更新 更多