2010-11-16 2 views
12

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

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

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

ответ

14

Если вы используете .resx-файл, вероятно, вам захочется воспользоваться функцией автоматического создания кода, которую Visual Studio предоставляет для файлов .resx. Если вы включаете файл .resx в несколько проектов, вы можете захотеть, чтобы каждый проект автоматически генерировал свой собственный код. Вы можете сделать это, потому что хотите использовать другой генератор кода для определенных проектов (ResXCodeFileGenerator vs. GlobalResourceProxyGenerator) или просто хотите, чтобы пространство имен сгенерированного кода было выровнено с проектом. Вот как вы можете это настроить.

Я создал новое решение с проектом приложения консоли C# под названием SharedResx. Я также добавил проект библиотеки классов C# к решению под названием Ресурсы, и в рамках этого проекта я добавил новый файл ресурсов с именем MySharedResource.resx. Visual Studio автоматически создает файл MySharedResource.Designer.cs в моем проекте «Ресурсы» с кодом внутри пространства имен «Ресурсы».

Сначала включите существующий файл .resx в проект приложения консоли SharedResx в качестве ссылки, как упомянуто в других ответах. Добавить существующий элемент -> найти .. \ Resources \ MySharedResource.resx -> использовать выпадающий список в кнопке Добавить, чтобы выбрать «Добавить как ссылку».

Затем вам необходимо вручную изменить файл проекта, чтобы настроить автогенерацию. Вы можете посмотреть Resource.csproj, чтобы узнать, как здесь создается автоматическое поколение в качестве руководства по тому, как оно должно выглядеть в SharedResx.csproj. Щелкните правой кнопкой мыши проект SharedResx и выберите «Выгрузить проект». Щелкните правой кнопкой мыши еще раз и выберите «Изменить SharedResx.csproj». прокрутки вниз, чтобы найти элемент EmbeddedResource, соответствующий вашему связанный файл .resx:

<EmbeddedResource Include="..\Resources\MySharedResource.resx"> 
    <Link>MySharedResource.resx</Link> 
</EmbeddedResource> 

Modify это включить генератор элемент и элемент 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, включенного в ваш проект.

+0

Ученик доктора Вили: Точно, что мне нужно –

+1

LastGenOutput работал отлично, СПАСИБО! – Fred

2

Я на самом деле не пробовал это с помощью файлов resx, но вы можете попробовать Adding As Link.

7

Visual Studio также позволяет вам использовать link to files вместо копирования. Эта функция немного скрыта, но вы можете получить доступ к нему, как это:

  1. Выберите «добавить существующий файл»
  2. После выбора файла, не не двойной щелчок, а обратите внимание на маленькую стрелку рядом кнопку «Открыть».
  3. В раскрывающемся меню выберите «Файл ссылок».
-2

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

+0

Мне кажется, что OP не хочет копировать файлы. –

0

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

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