Доступ к свойствам развертывания ClickOnce для .NET на Windows

Начиная с .NET 7 и Visual Studio 2022 версии 17.4, можно получить доступ к свойствам развертывания ClickOnce с помощью переменной среды.

Средство запуска приложений предоставляет общие свойства развертывания приложения ClickOnce с запущенным приложением (.NET только). Свойства предоставляются приложению с помощью переменных среды.

Имена переменных тесно соответствуют свойствам класса .NET Framework<xref:System.Deployment.Application.ApplicationDeployment>. Новые имена переменных включают ClickOnce_ префикс:

Помимо этих изменений, доступно новое свойство, которое возвращает версию средства запуска приложений:

  • ClickOnce_LauncherVersion

Приложение .NET может использовать эти свойства напрямую или косвенно.

Note

С помощью этого метода можно получить доступ к свойствам развертывания приложений, но .NET 7 не поддерживает эквивалент методов ApplicationDeployment.

Свойства доступа

В следующем примере кода показано, как напрямую получить доступ к двум свойствам: ClickOnce_IsNetworkDeployed и ClickOnce_ActivationUri.

NameValueCollection nameValueTable = new NameValueCollection();
if (Environment.GetEnvironmentVariable("ClickOnce_IsNetworkDeployed")?.ToLower() == "true")
{
    string value = Environment.GetEnvironmentVariable("ClickOnce_ActivationUri");
    Uri activationUri = string.IsNullOrEmpty(value) ? null : new Uri(value);
    if (activationUri != null)
    {
        nameValueTable = HttpUtility.ParseQueryString(activationUri.Query);
        Console.WriteLine("Query string: " + activationUri.Query);
        Console.ReadKey();
    }
}

Для косвенного использования этих свойств требуется реализация нового ApplicationDeployment класса на уровне приложения. Этот класс абстрагирует чтение переменных среды и предоставляет аналогичный интерфейс старому классу .NET Framework.

Пример реализации этого класса см. в ApplicationDeployment.cs.

В следующем фрагменте кода показано, как использовать этот класс:

NameValueCollection nameValueTable = new NameValueCollection();
if (ApplicationDeployment.IsNetworkDeployed)
{
    ApplicationDeployment ad = ApplicationDeployment.CurrentDeployment;
    if (ad.ActivationUri != null)
    {
        nameValueTable = HttpUtility.ParseQueryString(ad.ActivationUri.Query);
    }
}

Параметры ActivationUri и URL

Начиная с .NET 7, dotnet-mage поддерживает новый коммутатор -TrustURLParameters или-tu. Этот параметр позволяет задать необходимый атрибут развертывания с помощью средства dotnet-mage. Это изменение является улучшением по сравнению со старым инструментом Mage, который не поддерживал эту функциональность, а также требовал ручного изменения манифеста приложения для добавления атрибута trustURLParameters, <deployment install="true" trustURLParameters="true">.

Необходимо задать для trustURLParameters значение true, чтобы разрешить приложению доступ к параметрам ActivationUri и URL-адреса.

ClickOnce для .NET в Windows