WriteCodeFragment - задача
Создает временный файл кода из указанного созданного фрагмента кода. Не удаляет этот файл.
Параметры
В следующей таблице приводятся параметры задачи WriteCodeFragment
.
Параметр | Описание |
---|---|
AssemblyAttributes |
Необязательный параметр ITaskItem[] .Описание атрибутов для записи. Значение элемента Include — это полное имя типа атрибута, например System.AssemblyVersionAttribute .Каждая метаданные — это пара "имя-значение" параметра. Предполагается, что параметры имеют тип String в MSBuild 17.6 и более ранних версий, но в MSBuild 17.7 и более поздних версий можно также использовать типы, отличные String от этих mscorlib . Например, можно использовать true логические false значения, целые числа, перечисления и типы с плавающей запятой. Тип автоматически выводится из синтаксиса. Для типа, который не указан mscorlib , укажите тип параметра, указав значения метаданных в форме {parameter}_TypeName .Некоторые атрибуты допускают только позиционные аргументы конструктора. Однако подобные аргументы можно использовать в любом атрибуте. Чтобы задать атрибуты позиционного конструктора, используйте имена метаданных, которые похожи _Parameter1 _Parameter2 и т. д. Не удается пропустить индекс параметров.В MSBuild 17.7 или более поздней версии можно также указать метаданные формы {parameter}_IsLiteral , чтобы указать задачу интерпретировать текст значения параметра как есть, не касаясь кавычек (как и в случае по умолчанию для строковых значений). |
Language |
Обязательный параметр String .Задает язык для создаваемого кода. Language может быть любым языком, для которого доступен поставщик CodeDom, например "C#" или "VisualBasic". Создаваемый файл будет иметь расширение имени файла по умолчанию для этого языка. |
OutputDirectory |
Необязательный параметр ITaskItem. Указывает папку назначения для созданного кода, которая обычно является промежуточной. |
OutputFile |
Необязательный выходной параметр ITaskItem . Задает путь к созданному файлу. Если этот параметр задан с помощью имени файла, папка назначения добавляется в начало этого имени. Если он задан с помощью корневого каталога, папка назначения игнорируется. Если этот параметр не задан, выходное имя файла — это целевая папка, произвольное имя файла и расширение имени файла по умолчанию для указанного языка. |
Замечания
Помимо параметров, перечисленных в таблице, эта задача наследует параметры от класса TaskExtension, который сам является производным от класса Task. Список этих дополнительных параметров и их описания см. в статье Базовый класс TaskExtension.
Эта задача обычно не используется непосредственно в пользовательском коде.
Создание атрибутов уровня сборки
В MSBuild 17.7 и более поздних версиях эта задача была обновлена для поддержки большего количества типов параметров для атрибутов уровня сборки. MSBuild 17.6 и более ранних версий поддерживается только String
в качестве типа параметра для атрибутов уровня сборки. С помощью MSBuild 17.7 и более поздних версий можно создать любой атрибут сборки .NET, а не только те, чьи параметры были строковыми типами, как и в более ранних версиях MSBuild.
Например, чтобы определить атрибут CLSCompliant(true)
уровня сборки, который использует логический параметр, можно использовать следующий синтаксис:
<ItemGroup>
<AssemblyAttribute Include="System.CLSCompliantAttribute">
<_Parameter1>true</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Созданный код зависит от целевого языка. Для C#это будет следующим образом:
[assembly: System.CLSCompliantAttribute(true)]
Типы, определенные в mscorlib
этом примере, автоматически выводятся, например логическое значение в предыдущем примере. Можно определить метаданные формы {parameter}_TypeName
, чтобы указать типы, которые не могут быть выведены.
<ItemGroup>
<AssemblyAttribute Include="Microsoft.Owin.OwinStartup">
<_Parameter1>Microsoft.Examples.Startup</_Parameter1>
<_Parameter1_TypeName>System.Type</_Parameter1_TypeName>
</AssemblyAttribute>
</ItemGroup>
Код, созданный в C#, выглядит следующим образом:
[assembly: Microsoft.Owin.OwinStartup(typeof(Microsoft.Examples.Startup))]
Для более сложных значений параметров можно использовать {parameter}_IsLiteral
.
<ItemGroup>
<AssemblyAttribute Include="NUnit.Framework.Parallelizable">
<_Parameter1>NUnit.Framework.ParallelScope.Fixtures</_Parameter1>
<_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
</AssemblyAttribute>
</ItemGroup>
В предыдущем примере создается следующий атрибут сборки в C#:
[assembly: NUnit.Framework.Parallelizable(NUnit.Framework.ParallelScope.Fixtures)]
Вы можете использовать любой синтаксис, который обычно допускается в объявлении атрибутов на языке проекта. Для параметра массива можно использовать следующий код:
<ItemGroup>
<AssemblyAttribute Include="TestAttribute">
<_Parameter1>new int[] { 1, 3, 5 } /* odd numbers */</_Parameter1>
<_Parameter1_IsLiteral>true</_Parameter1_IsLiteral>
</AssemblyAttribute>
</ItemGroup>
При использовании IsLiteral
синтаксис интерпретируется соответствующим компилятором и поэтому зависит от языка. Если у вас есть несколько языков с одинаковыми файлами импорта MSBuild и (или) файлами проекта, возможно, потребуется использовать условный синтаксис, чтобы обеспечить компиляцию кода с соответствующим языком для конкретного проекта.
Примечание.
Синтаксис, описанный в этом разделе (_TypeName
и _IsLiteral
суффиксы), не поддерживается в F#.
Пример
Типичный вариант использования задачи WriteCodeFragment
находится в целевом объекте, который создает файл, который определяет атрибут уровня сборки и добавляет его в сборку. С AssemblyAttribute
помощью определенного WriteCodeFragment
кода можно вызвать задачу, как показано в следующем коде.
<Target Name="AddAssemblyVersion" BeforeTargets="Build">
<ItemGroup>
<AssemblyAttribute Include="AssemblyVersion">
<_Parameter1>1.2.3.4</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
<WriteCodeFragment AssemblyAttributes="@(AssemblyAttribute)"
Language="C#"
OutputDirectory="$(IntermediateOutputPath)"
OutputFile="AssemblyVersion.cs">
<Output TaskParameter="OutputFile" ItemName="Compile" />
<Output TaskParameter="OutputFile" ItemName="FileWrites" />
</WriteCodeFragment>
</Target>
Присваивается OutputFile
определенное имя файла; если не указано, имя файла создается случайным образом. Кроме того, чтобы добавить созданный файл в сборку, Compile
список элементов предоставляется в виде выходных данных. Файл также добавляется в FileWrites
список элементов, чтобы он был удален при запуске целевого Clean
объекта.