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

EDIT: на каждый значок может ссылаться более одного проекта, поэтому переменная среды любого механизма, используемого для настройки путей, должна быть доступна для всего решения, и я должен иметь возможность установить это изнутри скрипта MSBuild.

EDIT 2: все мои формы определены в проектах C# или VB.NET.


person dario_ramos    schedule 03.02.2012    source источник


Ответы (2)


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

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

person blueberryfields    schedule 03.02.2012
comment
Эти инструкции применимы только к проектам Visual C++. Я забыл упомянуть об этом, но все мои формы - это проекты VB.NET и C #, у которых нет параметров среды в разделе «Свойства» -> «Отладка». - person dario_ramos; 03.02.2012

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

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