Нужен ли мне файл resx Designer.cs? - PullRequest
15 голосов
/ 10 июля 2010

Моя компания использует комбинацию некоторых таблиц базы данных, внешнего интерфейса веб-страницы и приложения "экспорт" для обработки наших строковых ресурсов на наших веб-сайтах.

Приложение экспорта обычно отлично работало, когда мыиспользовался VS2008, но после перехода на VS2010 у ресурсов теперь есть файл designer.cs «под ними» в обозревателе решений.

Проблема в том, что приложение «export» генерирует только файлы .resx, а нележащие в основе файлы designer.cs.

Итак, есть ли способ не иметь этих файлов designer.cs или, альтернативно, какой-то способ автоматической повторной генерации (или даже какая-то команда, которую приложение экспорта может вызвать для повторной генерации)их)

Ответы [ 5 ]

12 голосов
/ 08 мая 2013

У меня была проблема, когда VS 2010 не мог восстановить файлы Designer.cs и не мог найти решение в другом месте.

Хотя я смог восстановить их, не переходя в командную строку.

Чтобы устранить проблему в Visual Studio 2010, я сделал следующее:

  1. Удалил файл Designer.cs
  2. Щелкните правой кнопкой мыши основной файл resx
  3. Выбрано Run Custom Tool

Это перестроило файл Designer.cs.

Надеюсь, что это может помочь кому-то еще в будущем ..

8 голосов
/ 10 июля 2010

Из MSDN имеем:

Компиляция ресурсов в сборки

Когда вы создаете приложение, Visual Studio вызывает resgen.exe инструмент для преобразования ресурсов вашего приложения в внутренний Класс под названием Ресурсы. Этот класс содержится в Resources.Designer.cs файл, который вложен в Файл Resources.resx в решении Проводник. Класс ресурсов инкапсулирует весь ваш проект ресурсы в статическое чтение только получить свойства как способ обеспечения строго типизированные ресурсы во время выполнения. Когда вы строите через Visual C # IDE, весь инкапсулированный ресурс данные, включая оба ресурса которые были встроены в файл .resx и связанные файлы, компилируется прямо в сборку приложения (файл .exe или .dll). В других слова, Visual C # IDE всегда использует опция компилятора / resource. если ты построить из командной строки, вы можете укажите компилятор / linkresource вариант, который позволит вам развернуть ресурсы в отдельном файле от сборка основного приложения. Это продвинутый сценарий и только необходимо в некоторых редких ситуациях.

3 голосов
/ 09 августа 2015

Если вы предпочитаете автоматически генерировать файлы * .designer.cs из файлов * .resx при сборке проекта, для нас сработал следующий подход, который также может работать и для вас:

  1. Закройте ваше решение
  2. Откройте в виде XML-файла файл проекта, в котором вы хотите автоматически сгенерировать файлы конструктора.Обратите внимание, что вам нужно загрузить его в виде файла XML.Вы не можете редактировать эти настройки на странице свойств проекта.
  3. Добавьте цель к проекту следующим образом:
<Target Name="GenerateDesignerFiles">
   <Message Text="Deleting old Designer Files..."/>
   <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).resources')"/>
   <Delete Files="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"/>
   <Message Text="Generating Designer Files..."/>
   <GenerateResource
      Sources="@(EmbeddedResource)"
      StronglyTypedLanguage="C#"
      StronglyTypedClassName="%(Filename)"
      StronglyTypedNamespace="@(EmbeddedResource->'%(CustomToolNamespace)')"
      StronglyTypedFileName="@(EmbeddedResource->'%(RootDir)%(Directory)%(Filename).designer.cs')"
      PublicClass="true"
      >
   </GenerateResource>
   <Message Text="Generating Designer Files complete."/>
</Target>
Найдите цель с именем "BeforeBuild".Эта цель может быть закомментирована (по умолчанию). Измените цель "BeforeBuild" следующим образом:
<Target Name="BeforeBuild">
   <CallTarget Targets="GenerateDesignerFiles"/>
</Target>

Это решение основано на том, что все файлы ресурсов перечислены как "EmbeddedResource "в ItemGroup файла проекта, например,

<ItemGroup>
  <EmbeddedResource Include="Resources\Creditor\Display_Creditor.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Display_Creditor.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace>
  </EmbeddedResource>
  <EmbeddedResource Include="Resources\InboundEmail\Tooltip_InboundEmailDetails.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Tooltip_InboundEmailDetails.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.InboundEmail</CustomToolNamespace>
  </EmbeddedResource>
  <EmbeddedResource Include="Resources\Creditor\Tooltip_CreditorDetails.resx">
    <Generator>PublicResXFileCodeGenerator</Generator>
    <LastGenOutput>Tooltip_CreditorDetails.Designer.cs</LastGenOutput>
    <CustomToolNamespace>Acme.Web.Resources.Creditor</CustomToolNamespace>
  </EmbeddedResource>
</ItemGroup>

Отказ от ответственности: это было протестировано с проектами Visual Studio 2013 и C #.Он может работать или не работать для других проектов и / или других версий Visual Studio.

1 голос
/ 09 марта 2018

Попробуйте это:

  • Щелкните правой кнопкой мыши на файле resx
  • Нажмите на свойства
  • Установите свойства:
  • Скопируйте в выходную директорию:Копировать всегда
  • Пользовательский инструмент: PublicResXFileCodeGenerator

Сохранить и построить заново.Проблема решена.

0 голосов
/ 25 февраля 2019

После этих шагов работал для меня.

  • Удалите ваш файл designer.cs.
  • Нажмите на свойства
  • Выходной каталог - всегда копируйте.
  • Пользовательский инструмент: PublicResXFileCodeGenerator
  • Сохраните и постройте.
  • Щелкните правой кнопкой мыши по resx и
  • Щелкните по запуску пользовательского инструмента.
...