Visual Studio 2010: складывать автоматически созданные ресурсы за другими файлами? - PullRequest
2 голосов
/ 03 июня 2011

У меня есть следующий файл: Foo.cs с классом Foo внутри.Кажется, я не могу найти правильный способ сохранить мои файлы ресурсов (resx) организованными позади их соответствующих файлов.

  1. Если я создаю Foo.resx, файл ресурсов будет красиво свернути аккуратно за классом Foo.cs.Это, однако, вызывает проблемы, потому что стандартный пользовательский инструмент, который генерирует код, пытается создать другой класс Foo (посмотрите на Foo.Designer.cs: internal class Foo { ... }).Если мой файл Foo.cs еще не содержит класс Foo, это прекрасно работает (без коллизии имен).

  2. Чтобы исправить коллизию имен, я попытался дать ему собственное пространство именMyProj.Resources и используйте псевдоним для его идентификации: using R = MyProj.Resources.Foo; Это все еще вызывает проблемы, потому что у автогенератора есть проблема с правильным созданием ResourceManager.

  3. Если I, вместо этого,назовите его как-то по FooResx.resx, оно не будет автоматически свернуто за файлом Foo.cs.Вместо этого он находится в обозревателе решений прямо под ним.Зайдя в файл MSBuild (.csproj) и добавив тег <DependentUpon>, Visual Studio аккуратно уберет мой файл FooResx.resx.Однако на самом деле я не могу использовать какие-либо ресурсы из этого файла, потому что у автоматически сгенерированного кода есть проблема с правильным созданием ResourceManager.

В принципе, есть ли способфайлы ресурсов (resx) сгибаются за файлом cs и по-прежнему работают должным образом с помощью стандартного пользовательского инструмента (ResXFileCodeGenerator)?


Я понимаю, что всегда могу поместить все свои ресурсы в файлв папке свойств: resources.resx.Я пытаюсь организовать их лучше, чем это.


Обновление:

Я решил вручную отредактировать автоматически сгенерированный код и сделать его частичным.Это позволило скомпилировать код, но я все равно столкнулся с той же проблемой (проблема № 2).Кажется, что если файл ресурсов свернут (вручную или автоматически) другим файлом кода, то ResourceManager не может найти файл *.resource.Это может быть проблемой, которую мне придется поднять с Microsoft Connect по поводу инструмента ResXFileCodeGenerator.Он должен быть в состоянии найти правильный файл *.resource, когда он свернут за другими файлами.

1 Ответ

0 голосов
/ 07 июня 2011

Решением может быть создание ваших классов и вашего сгенерированного кода частичных классов - если вы посмотрите на файл .Designer.cs (например, из System.Windows.Forms.Form), вы обнаружите, что он объявляет что-то вроде partial class Foo.

Foo.cs

public partial class Foo
{
}

Foo.Designer.cs

partial class Foo
{
}

Редактировать

Оказывается, StronglyTypedResourceBuilder или PublicResXFileCodeGenerator настаивают на создании классов с модификатором доступа internal или public (его можно установить в .resx).

Установка ResXFileCodeGenerator в качестве CustomTool в свойствах вашего .resx по-прежнему не дает вам поведения, которое вы увидите в сгенерированном .Desinger.cs файла Form.

...