Нужен ли мне файл resx Designer.cs?

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

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

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

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

Ответы

Ответ 1

Из MSDN мы имеем:

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

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

Ответ 2

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

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

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

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

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

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

Ответ 3

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

  • Закройте свое решение
  • Откройте в качестве файла XML файл проекта, в котором вы хотите автоматически генерировать файлы конструктора. Обратите внимание, что вам нужно загрузить его как файл XML. Вы не можете редактировать эти параметры на странице свойств проекта.
  • Добавьте цель в проект следующим образом:
<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>
  1. Найдите цель с именем "BeforeBuild". Эта цель может быть прокомментирована (по умолчанию).
  2. Измените цель "BeforeBuild" следующим образом:
<Target Name="BeforeBuild">
   <CallTarget Targets="GenerateDesignerFiles"/>
</Target>

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

<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 и С#. Он может работать или не работать для других проектов и/или других версий Visual Studio.