Избегайте жестко закодированных путей к файлам значков в файле .resx - PullRequest
2 голосов
/ 03 февраля 2012

Я пытаюсь заставить наше приложение обрабатывать различные наборы иконок (сделать его скином). Я спросил об обычном способе сделать это здесь . Когда я попытался применить решение из ответа, я заменил все жестко закодированные пути значков в файлах .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 голосов
/ 01 апреля 2015

Я не думаю, что есть способ выполнить использование файла ресурсов. Один из способов добиться этого - добавить свой растровое изображение в свой проект, щелкнуть его правой кнопкой мыши и изменить действие сборки на «Встроенный ресурс». Откройте файл проекта в текстовом редакторе и измените путь к переменной среды. (это то, как мы делаем это с VS 2008, с тех пор они сделали это проще). Тогда в коде вы можете сделать это ....

Assembly myAssembly = Assembly.GetExecutingAssembly();
Stream myStream = myAssembly.GetManifestResourceStream("btnDel.png");
new System.Drawing.Bitmap(myStream);
0 голосов
/ 03 февраля 2012

Системные переменные среды могут не работать.Вы можете попробовать выполнить следующие инструкции:

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

...