Share via


WriteCodeFragment 작업

생성된 특정 코드 조각에서 임시 코드 파일을 생성합니다. 파일을 삭제하지는 않습니다.

매개 변수

다음 표에서는 WriteCodeFragment 작업의 매개 변수에 대해 설명합니다.

매개 변수 Description
AssemblyAttributes 선택적 ITaskItem[] 매개 변수입니다.

작성할 특성의 설명입니다. 항목 Include 값은 특성의 전체 형식 이름입니다(예: System.AssemblyVersionAttribute.).

각 메타데이터는 매개 변수의 이름-값 쌍입니다. 매개 변수는 MSBuild 17.6 이하의 형식 String 으로 가정되지만 MSBuild 17.7 이상에서는 해당 형식이 아닌 String 다른 형식을 사용할 수도 있습니다 mscorlib. 예를 들어 부울 값, 정수, 열거형 및 부동 소수점 형식을 사용할 truefalse 수 있습니다. 형식은 구문에서 자동으로 유추됩니다. 형식이 mscorlib없는 경우 형식 {parameter}_TypeName에 메타데이터 값을 제공하여 매개 변수의 형식을 지정합니다.

일부 특성만 위치 생성자 인수를 허용합니다. 그러나 모든 특성에 이러한 인수를 사용할 수 있습니다. 위치 생성자 특성을 설정하려면 다음과 유사한 _Parameter1_Parameter2메타데이터 이름을 사용합니다. 매개 변수 인덱스 건너뛸 수 없습니다.

MSBuild 17.7 이상에서는 따옴표로 묶지 않고(문자열 값의 기본 경우처럼) 매개 변수 값 텍스트를 있는 그대로 해석하도록 태스크에 지시하는 양식 {parameter}_IsLiteral 의 메타데이터를 지정할 수도 있습니다.
Language 필수 String 매개 변수입니다.

생성할 코드의 언어를 지정합니다.

Language 는 CodeDom 공급자를 사용할 수 있는 언어(예: "C#" 또는 "VisualBasic")일 수 있습니다. 내보낸 파일에는 해당 언어의 기본 파일 이름 확장명이 있습니다.
OutputDirectory 선택적 ITaskItem 매개 변수입니다.

생성된 코드에 대한 대상 폴더를 지정합니다. 일반적으로 중간 폴더입니다.
OutputFile 선택적 ITaskItem 출력 매개 변수입니다.

생성된 파일의 경로를 지정합니다. 이 매개 변수가 파일 이름을 사용하여 설정된 경우 대상 폴더는 파일 이름에 추가됩니다. 루트를 사용하여 설정한 경우 대상 폴더는 무시됩니다.

이 매개 변수가 설정되지 않은 경우 출력 파일 이름은 대상 폴더, 임의의 파일 이름 및 지정된 언어의 기본 파일 이름 확장명입니다.

설명

이 작업은 표에 나열된 매개 변수 외에, Task 클래스에서 직접 상속하는 TaskExtension 클래스의 매개 변수도 상속합니다. 이러한 추가 매개 변수 및 해당 설명이 포함된 목록은 TaskExtension 기본 클래스를 참조하세요.

이 작업은 일반적으로 사용자 코드에서 직접 사용되지 않습니다.

어셈블리 수준 특성 생성

MSBuild 17.7 이상에서는 어셈블리 수준 특성에 대해 더 다양한 매개 변수 형식을 지원하도록 이 작업이 업데이트되었습니다. MSBuild 17.6 이하는 어셈블리 수준 특성에 대한 매개 변수 형식으로만 String 지원됩니다. MSBuild 17.7 이상을 사용하면 이전 버전의 MSBuild에서와 같이 매개 변수가 문자열 형식인 특성뿐만 아니라 모든 .NET 어셈블리 특성을 생성할 수 있습니다.

예를 들어 부울 매개 변수를 사용하는 어셈블리 수준 특성을 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 파일이 삭제됩니다.

참고 항목