Подтвердить что ты не робот

Как разные решения относятся к одному файлу resx?

У меня есть один файл resx, и я хочу использовать его из нескольких решений \projects, и я не хочу иметь локальную копию в каждом решении (только во время компиляции приносите копию).

Есть ли способ сделать это? Потому что, когда я добавляю его как "Добавить существующий файл", он копирует мне копию локально.

Любая идея, как это сделать?

4b9b3361

Ответ 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 файла, включенного в ваш проект.

Ответ 2

Visual Studio также позволяет ссылаться на файлы вместо копирования. Функция немного скрыта, но вы можете получить к ней доступ следующим образом:

  • Выберите "добавить существующий файл"
  • После выбора файла дважды щелкните его, но обратите внимание на маленькую стрелку раскрывающегося списка рядом с кнопкой "Открыть".
  • В раскрывающемся меню выберите "Файл ссылок".

Ответ 4

Я не знаю почему, но "Добавить как ссылка" работает не так, как ожидалось для меня, он все равно пытается скопировать файл в папку проекта (не очень хорошо, если вы используете интеграцию Subversion Ankhsvn). Здесь Я написал пошаговое руководство с подходом, похожим на Dr. Wily Apprentice, но с некоторыми улучшениями, такими как реальное совместное использование ресурсов.

Ответ 5

В Visual Studio у вас есть возможность выполнить script перед компиляцией, скопируйте там файл.