# AddAndRemoveRequest

> Represents an asynchronous request to add package dependencies to the project, remove package dependencies from the project, or both.

## Definition

* **Type:** Class
* **Namespace:** [UnityEditor.PackageManager.Requests](/engine/6000.5/script-reference/unityeditor/packagemanager/requests.md)
* **Assembly:** UnityEditor.CoreModule
* **Inherits from:** [Request\<PackageCollection>](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request1.md)
* **Implements:** [ISerializationCallbackReceiver](/engine/6000.5/script-reference/unityengine/iserializationcallbackreceiver.md)

```csharp
public sealed class AddAndRemoveRequest : Request<PackageCollection>, ISerializationCallbackReceiver
```

## Remarks

The PackageManager [Client](/engine/6000.5/script-reference/unityeditor/packagemanager/client.md) class returns an AddAndRemoveRequest instance when you call the [Client.AddAndRemove](/engine/6000.5/script-reference/unityeditor/packagemanager/client/addandremove.md) method to add or remove package dependencies in the project. Use this object to determine when the request is complete and to access the result.

After the request completes, you can retrieve the [PackageCollection](/engine/6000.5/script-reference/unityeditor/packagemanager/packagecollection.md) instance from the Result property.

**Dry run support:** When you call the [Client.AddAndRemove](/engine/6000.5/script-reference/unityeditor/packagemanager/client/addandremove.md) method with `dryRun` set to `true`, the Package Manager simulates the add and remove operations without actually changing the project. The Result property contains the simulated final package state, which allows you to preview your changes as if `dryRun` was `false`.

```csharp
using UnityEngine;
using UnityEditor.PackageManager;
using UnityEditor.PackageManager.Requests;
[ExecuteInEditMode]
public class PackageManagerAddRemoveExample : MonoBehaviour
{
    AddAndRemoveRequest m_Request;

    void Start()
    {
        Debug.Log("Client.AddAndRemove example...");

        var packagesToAdd = new[] 
        { 
            "com.unity.textmeshpro",
            "com.unity.inputsystem"
        };

        var packagesToRemove = new[] 
        { 
            "com.unity.timeline" 
        };

        m_Request = Client.AddAndRemove(packagesToAdd, packagesToRemove);
    }

    void Update()
    {
        if (m_Request != null && m_Request.IsCompleted)
        {
            if (m_Request.Status == StatusCode.Success)
            {
                Debug.Log("Packages updated successfully:");
            }
            else
            {
                Debug.LogError($"Operation failed: {m_Request.Error.message}");
            }
            m_Request = null;
        }
    }
}
```

**Related information**

* [Client.AddAndRemove](/engine/6000.5/script-reference/unityeditor/packagemanager/client/addandremove.md)
* [PackageCollection](/engine/6000.5/script-reference/unityeditor/packagemanager/packagecollection.md)
* [Request\<T>](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request1.md)
* [PackageInfo](/engine/6000.5/script-reference/unityeditor/packagemanager/packageinfo.md)

## Inheritance

**Inherited Members:**

* [Request\<PackageCollection>.Result()](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request1/result.md)
* [Request.Status()](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request/status.md)
* [Request.IsCompleted()](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request/iscompleted.md)
* [Request.Error()](/engine/6000.5/script-reference/unityeditor/packagemanager/requests/request/error.md)
