Ресурсы Visual Studio 2010 (WPF)

Я работал в визуальной студии и у меня был файл класса: Foo.cs ... Я создал файл ресурсов (resx) с именем Foo.resx, потому что я также планирую иметь Foo.es-SP.resx.

Visual studio очень хорошо спрятала файл ресурсов точно так же, как убирает файлы кода программной части для страниц xaml.

Проблема в том, что приложение не компилируется, потому что генератор ресурсов создал класс Foo.Designer.cs (дизайнер), который имеет внутренний класс Foo для ресурса, имя которого совпадает с именем моего класса Foo:

Foo.cs

public class Foo { ... }

Foo.Designer.cs

internal class Foo { ... }

что очень раздражает, потому что мое приложение сейчас не компилируется. Итак, я решил обмануть Visual Studio и переименовать файл (а не сам класс). Теперь у меня есть FooC.cs, FooC.resx и FooC.Designer.cs. Это изменило класс resx на internal class FooC { ... }

Он компилируется, но не дает сбоев, когда я запускаю приложение, когда пытаюсь захватить ресурс.

  1. Почему Visual Studio создает внутренний класс, который конфликтует с моим существующим классом? Очевидно, что создаваемый ресурс для вашего класса должен иметь такое же имя, потому что он организует его для вас.

  2. Почему я получаю сообщение об ошибке выполнения, когда пытаюсь использовать ресурс, помеченный как «Встроенный ресурс»?

Сообщение об ошибке:

System.Resources.MissingManifestResourceException: не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что «MyProj.FooC.resources» был правильно встроен или связан со сборкой «MyProj» во время компиляции, или что все необходимые вспомогательные сборки загружаются и полностью подписаны. в System.Resources.ManifestBasedResourceGroveler.HandleResourceStreamMissing (String fileName)


person michael    schedule 15.04.2011    source источник


Ответы (2)


Выберите Foo.es-SP.resx в обозревателе решений, отобразите его свойства (F4) и очистите свойство Custom Tool.

person Thomas Levesque    schedule 15.04.2011
comment
Я еще даже не дошел до Foo.es-SP.resx. Я все еще пытаюсь заставить Foo.resx нормально работать ... - person michael; 15.04.2011
comment
Что именно ты хочешь? Планируете ли вы использовать сгенерированный класс? Если нет, очистите настраиваемый инструмент для Foo.resx, и он не будет генерировать класс. - person Thomas Levesque; 15.04.2011
comment
Я хочу иметь возможность использовать ресурсы String, которые я ввожу в файл ресурсов. У меня есть Title в качестве одной из строк ресурса, но как мне на самом деле использовать его в своем классе, если я продолжаю получать эти ошибки. В идеале я бы хотел, чтобы мой ресурс был только внутренним по отношению к моей сборке, но также не давал мне этих столкновений с именами, и если я не назову файл ресурсов так же, как файл класса, VS не организует его должным образом. Я мог бы добавить FooResources.resx и сослаться на него, но Foo.resx намного лучше. - person michael; 15.04.2011

Измените свое имя Foo.resx на, например, FooResources.resx.

person Luis Filipe    schedule 15.04.2011
comment
Да, это решило проблему наличия двух классов Foo, но у меня все еще есть другая проблема. Кроме того, это заставляет ресурс просто оставаться на месте, а не организовывать его с помощью Visual Studio. - person michael; 15.04.2011
comment
Исходя из моего собственного опыта, я бы не советовал вам сильно отклоняться от шаблона, разработанного Microsoft - позже вы в конечном итоге попытаетесь бороться (и, возможно, выиграть) с шаблоном. Обычно я создаю файлы ресурсов в другой папке внутри проекта. Это по умолчанию помещает их в другое пространство имен, поэтому у меня никогда не было проблемы, о которой вы говорите. - person Luis Filipe; 20.04.2011
comment
Что ж, дело в том, что похоже, что Microsoft хочет справиться с этим так, как я хочу (вроде как). Иначе зачем Visual Studio автоматически свернуть ресурс в файл cs, как это происходит с формами и выделенным кодом? - person michael; 21.04.2011