Нужен ли мне файл 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>
- Найдите цель с именем "BeforeBuild". Эта цель может быть прокомментирована (по умолчанию).
- Измените цель "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.