GenerateResource - задача

Преобразовывает файлы формата .txt и .resx (файлы ресурсов на основе XML) в двоичные файлы .resources для среды CLR, которые могут быть внедрены в двоичный исполняемый файл среды выполнения или скомпилированы во вспомогательные сборки, или наоборот. Эта задача обычно используется для преобразования файлов .txt или .resx в файлы .resources. Задача GenerateResource функционально аналогична resgen.exe.

Параметры

В следующей таблице приводятся параметры задачи 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#.

См. также