GenerateResource - задача
Преобразовывает файлы формата .txt
и .resx
(файлы ресурсов на основе XML) в двоичные файлы .resources
для среды CLR, которые могут быть внедрены в двоичный исполняемый файл среды выполнения или скомпилированы во вспомогательные сборки, или наоборот. Эта задача обычно используется для преобразования файлов .txt
или .resx
в файлы .resources
. Задача GenerateResource
функционально аналогична resgen.exe.
Внимание
Ресурсы в .resx
файлах могут сериализоваться с помощью BinaryFormatter
небезопасного. Включите только те .resx
файлы в процесс сборки, которым вы доверяете.
Параметры
В следующей таблице приводятся параметры задачи GenerateResource
.
Параметр | Описание |
---|---|
AdditionalInputs |
Необязательный параметр ITaskItem[] .Содержит дополнительные входные данные для проверки зависимости, выполняемой этой задачей. Например, файлы проекта и целей построения, как правило, должны быть входными данными, чтобы в случае их обновления все ресурсы создались заново. |
EnvironmentVariables |
Необязательный параметр String[] .Указывает массив пар имя-значение переменных среды, которые нужно передать в порожденный файл resgen.exe, дополняя (или выборочно переопределяя) обычный блок среды. |
ExcludedInputPaths |
Необязательный параметр ITaskItem[] .Определяет массив элементов, указывающих пути, отслеживаемые данные в которых будут игнорироваться во время проверки наличия обновлений. |
ExecuteAsTool |
Необязательный параметр Boolean .Если задано значение true , из соответствующей внепроцессной требуемой версии .NET Framework запустятся процессы Tlbimp.exe и Aximp.exe для создания необходимых сборок-оболочек. Этот параметр разрешает настройку для различных версий ResolveComReferences . |
FilesWritten |
Необязательный выходной параметр ITaskItem[] .Содержит имена всех файлов, записанных на диск. Включает файл кэша (при его наличии). Этот параметр полезен для реализаций метода Clean. |
MinimalRebuildFromTracking |
Необязательный параметр Boolean .Получает или задает параметр, указывающий, будет ли использоваться отслеживаемая добавочная сборка. Если задано значение true , включится добавочная сборка. В противном случае произойдет принудительное выполнение повторной сборки. |
NeverLockTypeAssemblies |
Необязательный параметр Boolean .Возвращает или задает логическое значение, указывающее, следует ли создать новый AppDomain для оценки файлов ресурсов (RESX) (true) или создать новый AppDomain только в том случае, когда файлы ресурсов ссылаются на сборку пользователя (false). |
OutputResources |
Необязательный выходной параметр ITaskItem[] .Указывает имя созданных файлов, например файлов .resources . Если имя не указано, используется имя соответствующего входного файла, а создаваемый файл .resources помещается в каталог, содержащий входной файл. |
PublicClass |
Необязательный параметр Boolean .Если задано значение true , создает класс ресурса со строгой типизацией как открытый класс. |
References |
Необязательный параметр String[] .Ссылки для загрузки типов в файлы .resx . Элементы данных в файле .resx могут содержать тип .NET. Этот параметр должен быть разрешен при считывании файла .resx. Как правило, он разрешается с использованием стандартных правил загрузки типов. Если предоставить сборки в References , они будут иметь приоритет.Для строго типизированных ресурсов этот параметр не требуется. |
SdkToolsPath |
Необязательный параметр String .Указывает путь к средствам пакета SDK, например resgen.exe. |
Sources |
Обязательный параметр ITaskItem[] .Указывает элементы, которые нужно преобразовать. Элементы, передаваемые этому параметру, должны содержать одно из следующих расширений файлов: - .txt : указывает расширение текстового файла, который нужно преобразовать. Текстовые файлы могут содержать только строковые ресурсы.- .resx: указывает расширение файла ресурсов на основе XML, который нужно преобразовать. - .restext: задает тот же формат, что и TXT. Это уникальное расширение полезно в том случае, если требуется отделить исходные файлы, содержащие ресурсы, от других исходных файлов в процессе сборки. - .resources: указывает расширение для файла ресурсов, который нужно преобразовать. |
StateFile |
Необязательный параметр ITaskItem. Указывает путь к необязательному файлу кэша, используемому для ускорения проверки зависимости ссылок во входных RESX-файлах. |
StronglyTypedClassName |
Необязательный параметр String .Указывает имя класса для строго типизированного класса ресурсов. Если этот параметр не указан, используется базовое имя файла ресурсов. |
StronglyTypedFilename |
Необязательный параметр ITaskItem. Указывает имя файла исходного кода. Если этот параметр не указан, используется имя класса в качестве базового имени файла с расширением, зависящим от языка. Например: MyClass.cs. |
StronglyTypedLanguage |
Необязательный параметр String .Указывает язык, используемый во время создания источника класса для строго типизированного ресурса. Этот параметр должен полностью совпадать с одним из языков, применяемых CodeDomProvider. Пример: VB или C# .Во время передачи значения этому параметру указывается задача по созданию ресурсов со строгой типизацией. |
StronglyTypedManifestPrefix |
Необязательный параметр String .Указывает пространство имен ресурса или префикс манифеста для использования в создаваемом источнике класса для строго типизированного ресурса. |
StronglyTypedNamespace |
Необязательный параметр String .Указывает пространство имен, используемое в создаваемом источнике класса для строго типизированного ресурса. Если этот параметр не указан, все строго типизированные ресурсы находятся в глобальном пространстве имен. |
TLogReadFiles |
Необязательный параметр ITaskItem[] , доступный только для чтения.Получает массив элементов, представляющих журналы отслеживания чтения. |
TLogWriteFiles |
Необязательный параметр ITaskItem[] , доступный только для чтения.Получает массив элементов, представляющих журналы отслеживания записи. |
ToolArchitecture |
Необязательный параметр System.String. Используется, чтобы определить, нужно ли использовать Tracker.exe для создания ResGen.exe. Должна обеспечиваться возможность синтаксического анализа до элемента перечисления ExecutableType. Если задано значение String.Empty , используется эвристика для определения архитектуры по умолчанию. Для члена перечисления Microsoft.Build.Utilities.ExecutableType следует задать синтаксический анализ. |
TrackerFrameworkPath |
Необязательный параметр String .Задает путь к соответствующему расположению .NET Framework, содержащему FileTracker.dll. Если значение задано, пользователь отвечает за то, чтобы разрядность передаваемого файла FileTracker.dll соответствовала разрядности файла ResGen.exe, который планируется использовать. Если значение не задано, задача определяет соответствующее расположение на основе текущей версии .NET Framework. |
TrackerLogDirectory |
Необязательный параметр String .Задает промежуточный каталог, в котором будут размещены журналы отслеживания для выполнения этой задачи. |
TrackerSdkPath |
Необязательный параметр String .Задает путь к соответствующему расположению Windows SDK, содержащему Tracker.exe. Если значение задано, пользователь отвечает за то, чтобы разрядность передаваемого файла Tracker.exe соответствовала разрядности файла ResGen.exe, который планируется использовать. Если значение не задано, задача определяет соответствующее расположение на основе текущей версии Windows SDK. |
TrackFileAccess |
Необязательный параметр Boolean. Если задано значение true, используется каталог входного файла для разрешения относительных путей к файлам. |
UsePreserializedResources |
Необязательный параметр Boolean .Если задано значение true , то все типы ресурсов, кроме строковых, должны быть сериализованы с использованием PreserializedResourceWriter вместо ResourceWriter, что не поддерживается в .NET Core или .NET 5 или более поздних версий. |
UseSourcePath |
Необязательный параметр Boolean .Если задано значение true , задается каталог входного файла, который должен использоваться для разрешения относительных путей к файлам. |
Замечания
Так как файлы .resx
могут содержать ссылки на другие файлы ресурсов, сравнение меток времени для файлов с расширением .resx
и .resources
не позволяет определить, актуальны ли выходные данные. Вместо этого задача GenerateResource
отслеживает все ссылки в файлах .resx
и проверяет метки времени всех связанных файлов. Это значит, что атрибуты Inputs
и Outputs
не следует использовать в целевом объекте, содержащем задачу GenerateResource
, так как это может вызвать пропуск при запуске.
Помимо перечисленных выше параметров, эта задача наследует параметры от класса TaskExtension, который, в свою очередь, наследует от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс TaskExtension.
При использовании MSBuild 4.0 для проектов .NET 3.5 в ресурсах x86 может произойти ошибка сборки. Чтобы избежать этой проблемы, можно создать целевой объект, например сборку AnyCPU.
Параметр UsePreserializedResources
получает значение из свойства $(GenerateResourceUsePreserializedResources)
при обычном процессе сборки .NET. По умолчанию в проектах .NET Core и проектах, которые используют .NET 5 или более поздней версии, для этого свойства задается значение true
. Вы можете задать для $(GenerateResourceUsePreserializedResources)
значение true
, чтобы пакет SDK для .NET мог создавать проекты, нацеленные на платформу .NET Framework 4.6.1 или более поздней версии, с ресурсами других типов, кроме строковых. Сборка System.Resources.Extensions
должна быть доступна во время выполнения. Она по умолчанию доступен в .NET Core 3.0 и более поздних версий и в .NET 5 и более поздних версий, а также может использоваться на платформе .NET Framework 4.6.1 или более поздней версии с применением PackageReference.
Пример
Следующий пример использует задачу GenerateResource
для создания файлов .resources
из всех файлов, определенных коллекцией элементов Resx
.
<GenerateResource
Sources="@(Resx)"
OutputResources="@(Resx->'$(IntermediateOutputPath)%(Identity).resources')">
<Output
TaskParameter="OutputResources"
ItemName="Resources"/>
</GenerateResource>
Задача GenerateResource
использует метаданные <LogicalName>
элемента <EmbeddedResource>
для именования ресурса, внедренного в сборку.
Если эта сборка имеет имя myAssembly, то следующий код создаст внедренный ресурс с именем someQualifier.someResource.resources
:
<ItemGroup>
<EmbeddedResource Include="myResource.resx">
<LogicalName>someQualifier.someResource.resources</LogicalName>
</EmbeddedResource>
</ItemGroup>
Без метаданных <LogicalName>
этот ресурс получит имя myAssembly.myResource.resources
. Этот пример применяется только к процессу сборки Visual Basic и Visual C#.