Поделиться через


Задача GenerateResource

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

Осторожность

Ресурсы в файлах .resx могут быть сериализованы с помощью BinaryFormatter, что незащищено. Включите только те .resx файлы в процесс сборки, которым вы доверяете.

Параметры

В следующей таблице описаны параметры задачи GenerateResource.

Параметр Описание
AdditionalInputs Необязательный параметр ITaskItem[].

Содержит дополнительные входные данные для проверки зависимостей, выполняемой этой задачей. Например, файлы проекта и целевых объектов обычно должны быть входными данными, чтобы при их обновлении все ресурсы были повторно созданы.
EnvironmentVariables Необязательный параметр String[].

Задает массив пар "имя-значение" переменных среды, которые должны передаваться в разреженные resgen.exe, помимо (или выборочно переопределения) регулярного блока среды.
ExcludedInputPaths Необязательный параметр ITaskItem[].

Задает массив элементов, указывающих пути, из которых отслеживаемые входные данные будут игнорироваться во время актуальной проверки.
ExecuteAsTool Необязательный параметр Boolean.

Если true, выполняется tlbimp.exe и aximp.exe из соответствующей целевой платформы вне proc, чтобы создать необходимые сборки-оболочки. Этот параметр позволяет использовать многоцелевой ResolveComReferences.
FilesWritten Необязательный параметр вывода ITaskItem[].

Содержит имена всех файлов, записанных на диск, включая файл кэша, если таковой есть. Этот параметр полезен для реализации Clean.
MinimalRebuildFromTracking Необязательный параметр Boolean.

Возвращает или задает коммутатор, указывающий, будет ли использоваться отслеживаемая добавочная сборка. Если true, добавочная сборка включена; в противном случае перестроение будет принудительно.
NeverLockTypeAssemblies Необязательный параметр Boolean.

Возвращает или задает логическое значение, указывающее, следует ли создать новый appDomain для оценки файлов ресурсов (.resx) или создания нового 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.

Указывает путь к соответствующему расположению пакета SDK для Windows, который содержит Tracker.exe.

Если задано, пользователь несет ответственность за то, что биты Tracker.exe, которые они передают, соответствуют биту ResGen.exe, которую они намерены использовать. Если этот параметр не задан, задача решает соответствующее расположение на основе текущего пакета SDK для Windows.
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. Это свойство по умолчанию true в проектах и проектах .NET Core, использующих .NET 5 или более поздней версии. Можно задать для $(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>
        <WithCulture>false</WithCulture>
    </EmbeddedResource>
</ItemGroup>

Без метаданных <LogicalName> ресурс будет называться myAssembly.myResource.resources. Этот пример применяется только к процессу сборки Visual Basic и Visual C#.

См. также