VS 2017: l'opzione di debug della sicurezza è impostata ma richiede il processo di hosting di Visual Studio che non è disponibile

Jun 29 2017

La mia soluzione (che contiene una dozzina di progetti) funziona perfettamente in Visual Studio 2013.

In Visual Studio 2017, posso aprire la soluzione e compilarla.

Ma se avvio il debug, ottengo sistematicamente questo messaggio di errore:

L'opzione di debug di sicurezza è impostata ma richiede il processo di hosting di Visual Studio che non è disponibile in questa configurazione di debug. L'opzione di debug di sicurezza sarà disabilitata. Questa opzione può essere riattivata nella pagina delle proprietà Sicurezza. La sessione di debug continuerà senza debug di sicurezza

E poi, non succede niente. Niente inizia.

Per informazioni, questa è una soluzione con più progetti di avvio (incluso un progetto WPF).

Modifica: disabilitando l'opzione "Abilita impostazioni di sicurezza ClickOnce" in Progetto -> Proprietà -> scheda Sicurezza, funziona.

Risposte

22 ATD Feb 20 2018 at 20:27

Questo ha risolto il mio problema :

Molto probabilmente, hai accidentalmente capovolto il bit per eseguire il debug con le impostazioni di sicurezza di ClickOnce. Puoi ottenere le proprietà del progetto per la tua app, vai alla scheda "Sicurezza" e assicurati di deselezionare "Abilita impostazioni di sicurezza ClickOnce" o seleziona il pulsante di opzione "Questa è un'applicazione attendibile".

18 ScottO. Sep 06 2017 at 18:01

Nel caso in cui aiuti qualcun altro - ho lo stesso scenario - una soluzione di avvio multiplo che include un client che verrà distribuito con ClickOnce. Per eliminare il problema che il client non si avvia dopo aver ottenuto la finestra di dialogo Impostazioni di sicurezza, l'ho spostato più in alto nell'elenco nella finestra di dialogo dei progetti di avvio. Se il progetto client è sopra il progetto server nell'elenco, nessun errore, tutto esegue il debug. Se il progetto client è al di sotto del progetto server, viene visualizzato l'errore e il client non si apre mai. Questo non RISOLVE esattamente il problema, ma è una soluzione alternativa perfettamente adeguata per me.

EDIT: potrebbe essere necessario chiudere e riaprire Visual Studio affinché questa soluzione alternativa sia efficace.

10 MorrisS Aug 20 2018 at 20:57

Ho passato ore a cercare di capire il problema, questo lo ha risolto.

Vai a Progetto > Proprietà ...> Crea

Deseleziona la casella di controllo Preferisci 32 bit

4 jonmorgan Jul 21 2017 at 08:31

MS ha rimosso il processo di hosting VS in VS2017 - vedere

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

Per questo motivo, modificando l'impostazione EnableSecurityDebugging nel file utente del progetto su True, la finestra di dialogo Error viene visualizzata di nuovo in fase di esecuzione. Facendo clic su OK nella finestra di dialogo, l'impostazione del file utente torna a False.

Per quanto ne so, non ci sono soluzioni alternative, anche se MS sembra pubblicare aggiornamenti VS molto frequenti (l'ultimo è 15.3) Nel frattempo le app ClickOnce. non sarà in grado di utilizzare l'opzione di debug della sicurezza.

4 Mats Jun 29 2018 at 09:22

Questo potrebbe probabilmente essere un problema tecnico in alcuni file di configurazione. "Abilita le impostazioni di sicurezza di ClickOnce" era già deselezionato nelle impostazioni del progetto, ma questa finestra di dialogo appariva comunque ogni volta che veniva avviata l'applicazione. Ho fatto quanto segue per sbarazzarmi di questo dialogo:

  1. Apri la pagina progetto-> impostazioni di sicurezza
  2. Seleziona "Abilita impostazioni di sicurezza ClickOnce"
  3. Deseleziona "Abilita impostazioni di sicurezza ClickOnce"
  4. Salvare le proprietà e avviare nuovamente l'applicazione

Proprietà

1 jonmorgan Apr 08 2018 at 09:35

Ecco una soluzione alternativa che mi ha consentito di eseguire il debug della mia app ClickOnce in VS2017 senza ricevere il messaggio di errore "Impossibile determinare l'identità del chiamante" quando si accede all'archivio isolato. La soluzione alternativa dovrebbe funzionare anche in qualsiasi situazione che richieda le impostazioni di sicurezza di ClickOnce.

Per ricreare le impostazioni generate in precedenza quando sono state selezionate le impostazioni di sicurezza Abilita ClickOnce nella scheda Protezione delle proprietà del progetto, eseguire le operazioni seguenti:

1. Deseleziona Abilita impostazioni di sicurezza ClickOnce nella scheda Sicurezza delle proprietà del tuo progetto

2. Aggiungi quanto segue al tuo file App.Config se non è già presente

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

3.Aggiungi un riferimento a Microsoft.Build.Tasks.v4.0 al tuo progetto

Il codice per ricreare le impostazioni di ClickOnce può essere posizionato ovunque, ma il seguente metodo Main di esempio illustra l'idea generale

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

È possibile che venga visualizzato il messaggio di avviso relativo al processo di hosting VS non disponibile quando si esegue per la prima volta il codice precedente, ma successivamente l'impostazione EnableSecurityDebugging nel file utente del progetto sarà stata impostata su False e il codice dovrebbe essere eseguito normalmente.

Grazie al team di ClickOnce di Microsoft per l'aiuto su questa soluzione alternativa.

1 javon27 Apr 11 2019 at 20:39

Ho ancora un'altra ragione per cui questo messaggio potrebbe venire fuori. Nel mio caso, durante il test di clonazione della mia soluzione da Git, ho notato che Visual Studio ha deciso di impostare la piattaforma della soluzione Active su "Any CPU", mentre il mio progetto di avvio si rivolge esplicitamente a "x86". Ciò ha causato la mancata compilazione del progetto di avvio quando ho eseguito il comando build solution.

Selezionando la casella Build nel Configuration Manager per quel progetto è stato eliminato il messaggio di errore.

Nel caso qualcuno me lo chieda, non ricordo esattamente perché quel progetto si rivolge esplicitamente a x86.

1 MindyJ.Leslie Aug 22 2019 at 19:30

Ho appena avuto lo stesso problema. Preferisci 32 bit era disabilitato. Ho cercato nel percorso di output ed era bin \ Release.
Ho creato un percorso bin \ debug e ho impostato il percorso di output su questo. Risolto.

Matus Nov 20 2018 at 13:29

Per me la soluzione era passare a "L'applicazione è disponibile anche offline" nella scheda Pubblica delle proprietà del progetto

Prima avevo "L'applicazione è disponibile solo online"

wagtod Sep 24 2020 at 17:21

Il mio problema sembrava essere associato alla cartella in cui si trovava la soluzione. La mia soluzione del ramo DEV ha funzionato senza problemi, ma il ramo CERT (cartella locale diversa) ha fornito il messaggio di debug della sicurezza quando sono state controllate le impostazioni di sicurezza di ClickOnce.

La mia soluzione: avvia VS2019 come amministratore. Il problema è stato risolto durante il debug. E ora posso avviare senza amministratore e il debug è ancora buono.