RequiredAttribute Class
Defines the metadata attribute that task authors use to identify required task properties. Task properties with this attribute must have a set value when the task is run.
MSBuild is now included in Visual Studio instead of the .NET Framework. You can use MSBuild 12.0 side-by-side with versions previously deployed with the .NET Framework.For more information, see What's New in MSBuild 12.0.
Assembly: Microsoft.Build.Framework (in Microsoft.Build.Framework.dll)
| Name | Description | |
|---|---|---|
![]() | RequiredAttribute() | Initializes a new instance of the RequiredAttribute class. MSBuild is now included in Visual Studio instead of the .NET Framework. You can use MSBuild 12.0 side-by-side with versions previously deployed with the .NET Framework.For more information, see What's New in MSBuild 12.0. |
| Name | Description | |
|---|---|---|
![]() | Equals(Object^) | (Inherited from Attribute.) |
![]() | GetHashCode() | (Inherited from Attribute.) |
![]() | GetType() | (Inherited from Object.) |
![]() | IsDefaultAttribute() | (Inherited from Attribute.) |
![]() | Match(Object^) | (Inherited from Attribute.) |
![]() | ToString() | (Inherited from Object.) |
| Name | Description | |
|---|---|---|
![]() ![]() | _Attribute::GetIDsOfNames(Guid, IntPtr, UInt32, UInt32, IntPtr) | (Inherited from Attribute.) |
![]() ![]() | _Attribute::GetTypeInfo(UInt32, UInt32, IntPtr) | (Inherited from Attribute.) |
![]() ![]() | _Attribute::GetTypeInfoCount(UInt32) | (Inherited from Attribute.) |
![]() ![]() | _Attribute::Invoke(UInt32, Guid, UInt32, Int16, IntPtr, IntPtr, IntPtr, IntPtr) | (Inherited from Attribute.) |
If a property marked with this attribute is not assigned a value when the task is invoked, the build will fail.
For more information about using attributes, see Extending Metadata Using Attributes.
The following example shows the code for a task that creates one or more directories.
using System; using System.IO; using System.Security; using System.Collections; using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace Microsoft.Build.Tasks { /* * Class: MakeDir * * An MSBuild task that creates one or more directories. * */ public class MakeDir : Task { // The Required attribute indicates the following to MSBuild: // - if the parameter is a scalar type, and it is not supplied, fail the build immediately // - if the parameter is an array type, and it is not supplied, pass in an empty array // In this case the parameter is an array type, so if a project fails to pass in a value for the // Directories parameter, the task will get invoked, but this implementation will do nothing, // because the array will be empty. [Required] // Directories to create. public ITaskItem[] Directories { get { return directories; } set { directories = value; } } // The Output attribute indicates to MSBuild that the value of this property can be gathered after the // task has returned from Execute(), if the project has an <Output> tag under this task's element for // this property. [Output] // A project may need the subset of the inputs that were actually created, so make that available here. public ITaskItem[] DirectoriesCreated { get { return directoriesCreated; } } private ITaskItem[] directories; private ITaskItem[] directoriesCreated; /// <summary> /// Execute is part of the Microsoft.Build.Framework.ITask interface. /// When it's called, any input parameters have already been set on the task's properties. /// It returns true or false to indicate success or failure. /// </summary> public override bool Execute() { ArrayList items = new ArrayList(); foreach (ITaskItem directory in Directories) { // ItemSpec holds the filename or path of an Item if (directory.ItemSpec.Length > 0) { try { // Only log a message if we actually need to create the folder if (!Directory.Exists(directory.ItemSpec)) { Log.LogMessage(MessageImportance.Normal, "Creating directory " + directory.ItemSpec); Directory.CreateDirectory(directory.ItemSpec); } // Add to the list of created directories items.Add(directory); } // If a directory fails to get created, log an error, but proceed with the remaining // directories. catch (Exception ex) { if (ex is IOException || ex is UnauthorizedAccessException || ex is PathTooLongException || ex is DirectoryNotFoundException || ex is SecurityException) { Log.LogError("Error trying to create directory " + directory.ItemSpec + ". " + ex.Message); } else { throw; } } } } // Populate the "DirectoriesCreated" output items. directoriesCreated = (ITaskItem[])items.ToArray(typeof(ITaskItem)); // Log.HasLoggedErrors is true if the task logged any errors -- even if they were logged // from a task's constructor or property setter. As long as this task is written to always log an error // when it fails, we can reliably return HasLoggedErrors. return !Log.HasLoggedErrors; } } }
To run this task use a project file like this:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="MyTarget">
<MkDir Directories="NewDir" />
</Target>
</Project>
Any public static (Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.



