2016-12-08 1 views
1

В Resx свойств, я изменил пользовательский инструмент пространство имен из DefaultNamespace в MyNamespace.Language и следующий код генерируется:файлов ресурсы (RESX) не уважают пользовательский инструмент Пространства имен

namespace MyNamespace.Language 
{ 
    public class CommentResources 
    { 
    public static global::System.Resources.ResourceManager ResourceManager { 
     get { 
      //removed code... 
      global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DefaultNamespace.CommentResources", typeof(CommentResources).Assembly); 
    } 
} 

Как вы можете видеть, только класс имена изменяются, но не пространство имен передаются в конструкторе ResourceManager и из-за этого, когда я ResourceManager(typeof(CommentResources)) и создание экземпляра пытаюсь получить доступ ключа, он бросает MissingManifestResourceException, например:

var manager = new ResourceManager(typeof(CommentResources)); 
var resource = manager.GetString("myKey"); 

Как я могу поменять пространство имен?

EDIT:

Посмотрите на мое решение ниже. Всякий раз, когда я создаю файл resx в папке Enviroment, он создает нежелательное пространство имен. Вот что я пытаюсь избежать

enter image description here

+0

Это один прямо соответствует обычным советам врача: «если болит, то не делайте этого». Вам нужно будет объяснить, почему изменение пространства имен важно для вас, и почему изменение значения пространства имен по умолчанию для проекта не является достаточно хорошим, если вы хотите использовать альтернативный подход. –

+0

Это не очень хорошо. В одном из моих проектов (csproj) я должен создать один resx для каждого класса, и есть несколько классов в папках, но у этих классов нет пространства имен «папка», и ни один из них не должен быть resx, поэтому именно поэтому. Например, есть папка с именем «Enviroment», и я не могу иметь это как часть пространства имен, потому что вы знаете, что «Enviroment» уже является классом. Это всего лишь один пример, там есть несколько других папок. – JobaDiniz

+0

У нас есть отличная гарантия возврата денег. Пожалуйста, не говорите мне, добавьте его в свой вопрос. Разрабатывайте, особенно детали «папки». –

ответ

0

Я недавно наткнулся на тот же вопрос.

кажется, что Visual Studio 2017 генерирует код, который создает ResourceManager из RootNamespace.SubFolder.ResourcesFileName вместо CustomToolNamespace.ResourcesFileName.

Поскольку код создается из Single-File Generator инструмента в Visual Studio, называется либо ResXFileCodeGenerator (для внутреннего класса) или PublicResXFileCodeGenerator (для общественного класса), который внутренне использует StronglyTypedResourceBuilder класса, нет никакого способа, чтобы настроить его поведение, кроме реализации самостоятельно Single-File Generator как расширение Visual Studio и использование его в качестве генератора для встроенногоResource.

К счастью, есть более обходное решение. В файле .csproj в теге EmbeddedResource укажите тег LogicalName с текстовым значением RootNamespace.SubFolder.ResourcesFileName.resources.

В вашем конкретном случае, это будет выглядеть следующим образом:

<LogicalName>DefaultNamespace.CommentResources.resources</LogicalName> 
+0

получается, что я ошибался ... 'ResourceManager (« DefaultNamespace.CommentResources », typeof (CommentResources) .Сборка)' правильно, это не ошибка. Первый аргумент ('DefaultNamespace.CommentResources') - это * путь * встроенного файла resx в сборке. – JobaDiniz

Смежные вопросы