web-dev-qa-db-fra.com

VS 2017: l'option de débogage de sécurité est définie, mais elle nécessite le processus d'hébergement Visual Studio, indisponible.

Ma solution (qui contient une douzaine de projets) fonctionne parfaitement dans Visual Studio 2013. 

Dans Visual Studio 2017, je peux ouvrir la solution et la compiler. 

Mais si je lance le débogage, j'obtiens systématiquement ce message d'erreur: 

L'option de débogage de sécurité est définie, mais elle nécessite Visual Studio processus d'hébergement non disponible dans cette configuration de débogage. Le L'option de débogage de sécurité sera désactivée. Cette option peut être réactivée dans la page de propriétés de sécurité. La session de débogage se poursuivra sans débogage de sécurité

 enter image description here

Et puis, rien ne se passe. Rien ne commence. 

Pour information, il s'agit d'une solution avec plusieurs projets de démarrage (y compris un projet WPF).

Edit: En désactivant l'option "Activer les paramètres de sécurité ClickOnce" sous Projet -> Propriétés -> Onglet Sécurité, cela fonctionne.

32
StevenPF

Dans le cas où cela aiderait quelqu'un d'autre - j'ai le même scénario - une solution de démarrage multiple qui inclut un client qui sera déployé avec ClickOnce. Pour éliminer le problème que le client ne démarre pas après l’ouverture de la boîte de dialogue Paramètres de sécurité, je l’ai déplacé plus haut dans la liste de la boîte de dialogue Projets de démarrage. Si le projet client est au-dessus du projet serveur dans la liste, pas d'erreur, tout se débogue. Si le projet client est en dessous du projet serveur, j'obtiens l'erreur et le client ne s'ouvre jamais. Cela ne résout pas exactement le problème, mais constitue une solution de contournement parfaitement adéquate pour moi.

EDIT: Vous devrez peut-être fermer et rouvrir votre Visual Studio pour que cette solution de contournement soit efficace.

15
Scott O.

Cela a résolu mon problème: https://social.msdn.Microsoft.com/Forums/vstudio/en-US/3905f6ac-737b-420f-b312-3dd8e3676c35/getting-an-unexplained-securityexception?forum=wpf

Très probablement, vous avez accidentellement obtenu le bit retourné pour déboguer avec les paramètres de sécurité ClickOnce. Pouvez-vous obtenir les propriétés du projet pour votre application, allez dans l'onglet "Sécurité", et décochez la case "Activer les paramètres de sécurité ClickOnce" ou cocher la case d'option "Ceci est une application Trust complète".

9
ATD

MS a supprimé le processus d’hébergement VS dans VS2017 - voir

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

En raison de cette modification du paramètre EnableSecurityDebugging dans le fichier utilisateur du projet sur True, la boîte de dialogue Erreur s'affiche à nouveau au moment de l'exécution. Cliquez sur OK dans la boîte de dialogue pour rétablir le paramètre du fichier utilisateur sur False.

Autant que je sache, il n’ya aucune solution de contournement, bien que MS semble publier très fréquemment des mises à jour de VS (la dernière est de 15.3). Entre-temps, les applications ClickOnce. sera incapable d'utiliser l'option de débogage de sécurité. 

3
jon morgan

Cela pourrait probablement être un problème dans certains fichiers de configuration. L'option "Activer les paramètres de sécurité ClickOnce" était déjà désélectionnée dans les paramètres du projet, mais cette boîte de dialogue apparaît à chaque démarrage de l'application. J'ai fait ce qui suit pour me débarrasser de ce dialogue:

  1. Ouvrez la page du projet-> Paramètres de sécurité
  2. Marquer "Activer les paramètres de sécurité ClickOnce"
  3. Désélectionnez "Activer les paramètres de sécurité ClickOnce"
  4. Sauvegarder les propriétés et relancer l'application

Propriétés

2
Mats

J'ai passé des heures à essayer de comprendre le problème, cela l'a résolu.

Allez dans Projet> Propriétés ...> Construire

Décochez la case Préférer 32 bits

 enter image description here

2
Morris S

Voici une solution de contournement qui m'a permis de déboguer mon application ClickOnce dans VS2017 sans obtenir le message d'erreur «Impossible de déterminer l'identité de l'appelant» lors de l'accès au stockage isolé. La solution de contournement doit également fonctionner dans toutes les situations nécessitant les paramètres de sécurité ClickOnce.

Pour recréer les paramètres précédemment générés lorsque la case à cocher Activer les paramètres de sécurité ClickOnce sous l'onglet Sécurité des propriétés du projet est activée, procédez comme suit:

1. Décochez la case Activer les paramètres de sécurité ClickOnce dans l'onglet Sécurité des propriétés de votre projet.

2.Ajouter les éléments suivants à votre fichier App.Config s'il n'est pas déjà présent

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

3.Ajouter une référence à Microsoft.Build.Tasks.v4.0 à votre projet

Le code pour recréer les paramètres ClickOnce peut aller n'importe où, mais l'exemple de méthode Main suivant illustre l'idée générale

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

Le message d'avertissement indiquant que le processus d'hébergement VS n'est pas disponible peut s'afficher lorsque vous exécutez le code ci-dessus pour la première fois. Par la suite, le paramètre EnableSecurityDebugging du fichier utilisateur de votre projet a été défini sur False et le code doit être exécuté normalement.

Merci à l'équipe ClickOnce de Microsoft pour son aide concernant cette solution de contournement. 

1
jon morgan

Pour moi, la solution a été de passer à "L'application est également disponible hors connexion" dans l'onglet Publier des propriétés du projet.

Avant j'avais "L'application est disponible en ligne seulement"

0
Matus