Подтвердить что ты не робот

VS 2017: параметр отладки безопасности установлен, но для него требуется процесс хостинга Visual Studio, который недоступен

Мое решение (которое содержит десяток проектов) прекрасно работает в Visual Studio 2013.

В Visual Studio 2017 я могу открыть решение и скомпилировать его.

Но если я запускаю отладку, я систематически получаю это сообщение об ошибке:

Параметр отладки безопасности установлен, но для него требуется процесс размещения Visual Studio, который недоступен в этой конфигурации отладки. Параметр отладки безопасности будет отключен. Этот параметр может быть повторно включен на странице свойств безопасности. Сеанс отладки будет продолжен без отладки безопасности

enter image description here

И тогда ничего не происходит. Ничего не начинается.

Для информации, это решение с несколькими запускаемыми проектами (включая проект WPF).

Редактировать: отключив опцию "Включить параметры безопасности ClickOnce" в Project → Properties → вкладка Security, это работает.

4b9b3361

Ответ 1

В случае, если это помогает кому-то еще - у меня есть тот же сценарий - многозадачное решение для запуска, которое включает клиента, который будет развернут с помощью ClickOnce. Чтобы устранить проблему, с которой клиент не запускается после получения диалогового окна "Параметры безопасности", я переместил его выше в списке в диалоговом окне "Проекты запуска". Если проект клиента находится над проектом сервера в списке, нет ошибки, все отладки. Если проект клиента ниже серверного проекта, я получаю сообщение об ошибке, и клиент никогда не открывается. Это не означает РЕШЕНИЕ проблемы, но для меня это вполне подходит.

EDIT: вам может понадобиться закрыть и снова открыть Visual Studio для того, чтобы это решение оказалось эффективным.

Ответ 2

Это решило мою проблему: https://social.msdn.microsoft.com/Forums/vstudio/en-US/3905f6ac-737b-420f-b312-3dd8e3676c35/getting-an-unexplained-securityexception?forum=wpf

Скорее всего, вы случайно переключили бит для отладки с настройками безопасности ClickOnce. Можете ли вы получить свойства проекта для своего приложения, перейдите на вкладку "Безопасность" и обязательно снимите флажок "Включить параметры безопасности ClickOnce" или установите переключатель "Это приложение с полным доверием".

Ответ 3

Я часами пытался выяснить проблему, это решило ее.

Перейдите в Проект > Свойства...> Построить

Снимите флажок Предпочитать 32-битный

enter image description here

Ответ 4

MS удалили VS-хостинг в VS2017 - см.

https://vslive.com/Blogs/News-and-Tips/2017/02/Debugging-Visual-Studio-2017-aims-to-speed-up-your-least-favorite-job.aspx

Из-за этого изменение параметра EnableSecurityDebugging в файле пользователя проекта на True просто приводит к появлению диалогового окна Error, появляющегося снова во время выполнения. Включение диалогового окна OK в диалоговом окне изменит настройку файла пользователя на False.

AFAIK нет обходного пути, хотя MS, похоже, публикует очень частые обновления VS (последнее - 15.3). Тем временем приложения ClickOnce. не сможет использовать параметр отладки безопасности.

Ответ 5

Это может быть сбой в некоторых файлах конфигурации. "Включить настройки безопасности ClickOnce" уже не было отмечено в настройках проекта, но этот диалог появлялся при каждом запуске приложения. Я сделал следующее, чтобы избавиться от этого диалога:

  1. Откройте project-> страницу настроек безопасности
  2. Отметьте "Включить настройки безопасности ClickOnce"
  3. Снимите флажок "Включить настройки безопасности ClickOnce"
  4. Сохраните свойства и снова запустите приложение

свойства

Ответ 6

Вот обходной путь, который позволил мне отладить мое приложение ClickOnce в VS2017 без получения сообщения об ошибке "Невозможно определить личность вызывающего абонента" при доступе к изолированному хранилищу. Обходной путь также должен работать в любой ситуации, которая требует настройки безопасности ClickOnce.

Чтобы воссоздать параметры, которые были ранее сгенерированы при проверке параметров безопасности "Включить ClickOnce" на вкладке "Безопасность" свойств проекта, выполните следующие действия:

1. Снимите флажок Включить параметры безопасности ClickOnce на вкладке Безопасность в свойствах вашего проекта.

2. Добавьте следующее в файл App.Config, если его еще нет

<runtime>
  <NetFx40_LegacySecurityPolicyenabled="true"/>
</runtime>

3. Добавьте ссылку на Microsoft.Build.Tasks.v4.0 в ваш проект.

Код для воссоздания настроек ClickOnce может идти куда угодно, но следующий пример метода Main иллюстрирует общую идею

using System;
using System.Reflection;
using System.Runtime.Hosting;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Windows.Forms;
using Microsoft.Build.Tasks.Deployment.ManifestUtilities;


namespace SecurityDebuggingTest
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            if (args.Length > 0 && args[0] == "startui")
            {
                Application.Run(new Form1());
            }
            else
            {
                PermissionSet permissions = new PermissionSet(PermissionState.Unrestricted);
                string AppName = Assembly.GetEntryAssembly().GetName().Name;
                string AppExe = $"{AppName}.exe";
                string DebugSecurityZoneURL = $"{AppExe}.manifest";
                string AppManifestPath = $"{AppName}.application";
                string appType = "win32";
                AssemblyIdentity ca = AssemblyIdentity.FromManifest(AppManifestPath);
                string appIdentitySubString = $"Version={ca.Version}, Culture={ca.Culture}, PublicKeyToken={ca.PublicKeyToken}, ProcessorArchitecture={ca.ProcessorArchitecture}";
                string assemblyIdentity = $"http://tempuri.org/{AppManifestPath}#{AppManifestPath}, {appIdentitySubString}/{AppExe}, {appIdentitySubString},Type={appType}";
                System.ApplicationIdentity applicationIdentity = new System.ApplicationIdentity(assemblyIdentity);

                ApplicationTrust appTrust = new ApplicationTrust();
                appTrust.DefaultGrantSet = new PolicyStatement(permissions, PolicyStatementAttribute.Nothing);
                appTrust.IsApplicationTrustedToRun = true;
                appTrust.ApplicationIdentity = applicationIdentity;

                AppDomainSetup adSetup = new AppDomainSetup
                {
                    ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
                    ActivationArguments = new ActivationArguments(
                        ActivationContext.CreatePartialActivationContext(
                            applicationIdentity,
                            new string[] { AppManifestPath, DebugSecurityZoneURL })
                    ),
                    ApplicationTrust = appTrust
                };

                Evidence e = new Evidence();
                e.AddHostEvidence(appTrust);

                AppDomain a = AppDomain.CreateDomain("Internet Security Zone AppDomain", e, adSetup, permissions);
                a.ExecuteAssembly(AppExe, e, new string[] { "startui" });
            }
        }
    }
}

Вы можете увидеть предупреждающее сообщение о том, что процесс VS-хостинга недоступен, когда вы впервые запускаете вышеуказанный код, но после этого для параметра EnableSecurityDebugging в вашем пользовательском файле проекта будет задано значение False, и код должен работать как обычно.

Спасибо команде Microsoft ClickOnce за помощь в решении этой проблемы.

Ответ 7

У меня есть еще одна причина, почему это сообщение может появиться. В моем случае при тестировании клонирования моего решения из Git я заметил, что Visual Studio решила установить платформу активного решения на "Любой ЦП", тогда как мой проект запуска явно ориентирован на "x86". Это привело к тому, что проект запуска не был собран, когда я выполнил команду решения для сборки.

Установка флажка Build в Configuration Manager для этого проекта избавила от сообщения об ошибке.

Если кто-то спросит, я не помню точно, почему этот проект явно нацелен на x86.

Ответ 8

У меня просто была такая же проблема. Предпочитать 32-битный был отключен. Я посмотрел в выходной путь, и это был bin\Release.
Я создал путь bin\debug и установил выходной путь к этому. Решено.

Ответ 9

Для меня решение было переключиться на "Приложение также доступно в автономном режиме" на вкладке "Опубликовать" свойств проекта

До меня было "Приложение доступно только онлайн"

Ответ 10

Быстрое решение без объяснения причин: Запуск моего приложения в конфигурации "Отладка" остановил ошибку и позволил моему приложению работать.