c# - simbolo - VS 2017: la opción de depuración de seguridad está establecida pero requiere el proceso de alojamiento de Visual Studio que no está disponible




punto de interrupcion visual studio 2017 (4)

Mi solución (que contiene una docena de proyectos) funciona perfectamente en Visual Studio 2013.

En Visual Studio 2017, puedo abrir la solución y compilarla.

Pero si inicio la depuración, recibo sistemáticamente este mensaje de error:

La opción de depuración de seguridad está establecida, pero requiere el proceso de alojamiento de Visual Studio, que no está disponible en esta configuración de depuración. La opción de depuración de seguridad estará deshabilitada. Esta opción puede volver a habilitarse en la página de propiedades de Seguridad. La sesión de depuración continuará sin depuración de seguridad

Y entonces, no pasa nada. Nada comienza

Para obtener información, esta es una solución con varios proyectos de inicio (incluido un proyecto WPF).

Editar: al desactivar la opción "Habilitar la configuración de seguridad de ClickOnce" en Proyecto -> Propiedades -> pestaña Seguridad, funciona.


Aquí hay una solución que me permitió depurar mi aplicación ClickOnce en VS2017 sin recibir el mensaje de error "No se puede determinar la identidad de la persona que llama" al acceder al Almacenamiento aislado. La solución también debería funcionar en cualquier situación que requiera la configuración de seguridad de ClickOnce.

Para volver a crear la configuración que se generó anteriormente cuando se marcó la configuración de seguridad Habilitar ClickOnce en la pestaña Seguridad de las propiedades del proyecto, haga lo siguiente:

1. Desmarque Habilitar la configuración de seguridad de ClickOnce en la pestaña Seguridad de las propiedades de su proyecto

2. Agregue lo siguiente a su archivo App.Config si aún no está presente

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

3. Agregue una referencia a Microsoft.Build.Tasks.v4.0 a su proyecto

El código para recrear la configuración de ClickOnce puede ir a cualquier parte, pero el siguiente método principal de ejemplo ilustra la idea general

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" });
            }
        }
    }
}

Es posible que el mensaje de advertencia sobre el proceso de Alojamiento de VS no esté disponible la primera vez que ejecute el código anterior, pero posteriormente la configuración de EnableSecurityDebugging en el archivo de usuario de su proyecto se habrá establecido en False y el código debería ejecutarse normalmente.

Gracias al equipo de ClickOnce de Microsoft por su ayuda en esta solución.


En caso de que ayude a alguien más, tengo el mismo escenario, una solución de inicio múltiple que incluye un cliente que se implementará con ClickOnce. Para eliminar el problema de que el cliente no se inicia después de obtener el cuadro de diálogo Configuración de seguridad, lo moví más arriba en la lista del cuadro de diálogo de proyectos de inicio. Si el proyecto del cliente está por encima del proyecto del servidor en la lista, no hay error, todo se depura. Si el proyecto del cliente está por debajo del proyecto del servidor, recibo el error y el cliente nunca se abre. Esto no soluciona exactamente el problema, pero es una solución perfectamente adecuada para mí.

EDITAR: Es posible que deba cerrar y volver a abrir Visual Studio para que esta solución sea efectiva.


Esto solucionó mi problema: https://social.msdn.microsoft.com/Forums/vstudio/en-US/3905f6ac-737b-420f-b312-3dd8e3676c35/getting-an-unexplained-securityexception?forum=wpf

Lo más probable es que accidentalmente se haya volcado el bit para depurar con la configuración de seguridad de ClickOnce. ¿Puede obtener las propiedades del proyecto para su aplicación, vaya a la pestaña "Seguridad" y asegúrese de desmarcar "Habilitar la configuración de seguridad de ClickOnce" o marque el botón de opción "Esta es una aplicación de plena confianza".


MS ha eliminado el proceso de alojamiento de VS en VS2017 - ver

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

Debido a esto, cambiar la configuración de EnableSecurityDebugging en el archivo de usuario del proyecto a Verdadero simplemente hace que el cuadro de diálogo Error aparezca nuevamente en tiempo de ejecución. Al hacer clic en Aceptar en el cuadro de diálogo, la configuración del archivo de usuario vuelve a Falso.

AFAIK no hay una solución alternativa, aunque MS parece estar publicando actualizaciones de VS muy frecuentes (la última es la 15.3) Mientras tanto, las aplicaciones ClickOnce. no podrá utilizar la opción de depuración de seguridad.





visual-studio-2017