Ответ 1
Если вы используете файл .resx, вы, вероятно, захотите воспользоваться преимуществами автоматически сгенерированных функций кода, которые Visual Studio предоставляет для файлов .resx. Если вы включаете файл .resx в несколько проектов, вы можете захотеть, чтобы каждый проект автоматически генерировал свой собственный код. Вы можете сделать это, потому что хотите использовать другой генератор кода для определенных проектов (ResXCodeFileGenerator vs. GlobalResourceProxyGenerator) или просто хотите, чтобы пространство имен сгенерированного кода было выровнено с проектом. Здесь вы можете установить это.
Я создал новое решение с проектом консольного приложения С# под названием SharedResx. Я также добавил проект библиотеки классов С# к решению под названием Ресурсы, и в рамках этого проекта я добавил новый файл ресурсов с именем MySharedResource.resx. Visual Studio автоматически создает файл MySharedResource.Designer.cs в моем проекте "Ресурсы" с кодом внутри пространства имен "Ресурсы".
Сначала включите существующий файл .resx в проект приложения консоли SharedResx в качестве ссылки, как упомянуто в других ответах. Добавить существующий элемент → найти..\Ресурсы\MySharedResource.resx → использовать раскрывающийся список в кнопке Добавить, чтобы выбрать "Добавить как ссылку".
Затем вам нужно вручную изменить файл проекта, чтобы настроить автоматическое создание. Вы можете посмотреть Resource.csproj, чтобы узнать, как здесь создается автоматическое поколение в качестве руководства по тому, как оно должно выглядеть в SharedResx.csproj. Щелкните правой кнопкой мыши проект SharedResx и выберите "Выгрузить проект". Щелкните правой кнопкой мыши еще раз и выберите "Изменить SharedResx.csproj". Прокрутите страницу вниз, чтобы найти элемент EmbeddedResource, соответствующий вашему связанному файлу .resx:
<EmbeddedResource Include="..\Resources\MySharedResource.resx">
<Link>MySharedResource.resx</Link>
</EmbeddedResource>
Измените это, чтобы включить элемент Generator и элемент LastGenOutput:
<EmbeddedResource Include="..\Resources\MySharedResource.resx">
<Link>MySharedResource.resx</Link>
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>SharedResx.MySharedResource.Designer.cs</LastGenOutput>
</EmbeddedResource>
Примечание. Ручное редактирование необходимо только в том случае, если вы хотите управлять именем сгенерированного файла, как это было в моем примере. В противном случае вы можете указать элемент Generator с помощью параметра Custom Tool в окне "Свойства" в Visual Studio.
Также обратите внимание, что в элементе LastGenOutput я назвал сгенерированный файл с именем проекта SharedResx в качестве префикса. Это заставит ResXFileCodeGenerator создать файл с именем SharedResx.MySharedResource.Designer.cs в той же папке, что и файл .resx. Я экспериментировал с указанием относительного пути, а не просто имени файла в элементе LastGenOutput, чтобы получить сгенерированный файл в другой папке, такой как папка SharedResx, но я обнаружил, что он не работает последовательно. В то время как я смог сгенерировать файл в правильном месте в первый раз, элемент LastGenOutput потерял свое значение, чтобы последующие поколения не нацелились на это же место. Я отказался от этого и просто использовал префикс имени проекта как часть имени файла, чтобы избежать возможных конфликтов с другими проектами.
Теперь закройте файл SharedResx.csproj и снова щелкните правой кнопкой мыши, чтобы выбрать "Обновить проект". Щелкните правой кнопкой мыши связанный файл MySharedResource.resx в проекте SharedResx и выберите "Запустить настраиваемый инструмент". Теперь вы должны увидеть, что новый связанный файл с именем SharedResx.MySharedResource.Designer.cs был добавлен в проект в виде вложенного файла в файле MySharedResource.resx. Возможно, вам придется включить параметр "Показать все файлы" в окне обозревателя решений, чтобы увидеть его.
Теперь у вас есть файл кода, автоматически созданный из вашего общего .resx файла, включенного в ваш проект.