VS 2017: параметр отладки безопасности установлен, но для него требуется процесс хостинга Visual Studio, который недоступен
Мое решение (которое содержит десяток проектов) прекрасно работает в Visual Studio 2013.
В Visual Studio 2017 я могу открыть решение и скомпилировать его.
Но если я запускаю отладку, я систематически получаю это сообщение об ошибке:
Параметр отладки безопасности установлен, но для него требуется процесс размещения Visual Studio, который недоступен в этой конфигурации отладки. Параметр отладки безопасности будет отключен. Этот параметр может быть повторно включен на странице свойств безопасности. Сеанс отладки будет продолжен без отладки безопасности
![enter image description here]()
И тогда ничего не происходит. Ничего не начинается.
Для информации, это решение с несколькими запускаемыми проектами (включая проект WPF).
Редактировать: отключив опцию "Включить параметры безопасности ClickOnce" в Project → Properties → вкладка Security, это работает.
Ответы
Ответ 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" уже не было отмечено в настройках проекта, но этот диалог появлялся при каждом запуске приложения. Я сделал следующее, чтобы избавиться от этого диалога:
- Откройте project-> страницу настроек безопасности
- Отметьте "Включить настройки безопасности ClickOnce"
- Снимите флажок "Включить настройки безопасности ClickOnce"
- Сохраните свойства и снова запустите приложение
свойства
Ответ 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
Быстрое решение без объяснения причин: Запуск моего приложения в конфигурации "Отладка" остановил ошибку и позволил моему приложению работать.