VS 2017: Opsi debugging keamanan ditetapkan tetapi memerlukan proses hosting Visual Studio yang tidak tersedia

Jun 29 2017

Solusi saya (yang berisi selusin proyek) berfungsi dengan sempurna di Visual Studio 2013.

Dalam Visual Studio 2017, saya dapat membuka solusi dan mengkompilasinya.

Tetapi jika saya memulai debug, saya secara sistematis mendapatkan pesan kesalahan ini:

Opsi debugging keamanan ditetapkan tetapi memerlukan proses hosting Visual Studio yang tidak tersedia dalam konfigurasi debugging ini. Opsi debugging keamanan akan dinonaktifkan. Opsi ini dapat diaktifkan kembali di halaman properti Keamanan. Sesi debugging akan berlanjut tanpa debugging keamanan

Dan kemudian, tidak ada yang terjadi. Tidak ada yang dimulai.

Sebagai informasi, ini adalah solusi dengan beberapa proyek startup (termasuk proyek WPF).

Edit: Dengan menonaktifkan opsi "Aktifkan pengaturan keamanan ClickOnce" di bawah Proyek -> Properti -> tab Keamanan, ini berfungsi.

Jawaban

22 ATD Feb 20 2018 at 20:27

Ini memecahkan masalah saya :

Kemungkinan besar, Anda secara tidak sengaja mendapatkan sedikit membalik ke debug dengan pengaturan keamanan ClickOnce. Dapatkan Anda mendapatkan properti proyek untuk aplikasi Anda, buka tab "Keamanan", dan pastikan untuk menghapus centang "Aktifkan setelan Keamanan ClickOnce" atau centang tombol radio "Ini adalah aplikasi kepercayaan penuh".

18 ScottO. Sep 06 2017 at 18:01

Jika itu membantu orang lain - saya memiliki skenario yang sama - solusi beberapa startup yang mencakup klien yang akan disebarkan dengan ClickOnce. Untuk menghilangkan masalah yang tidak dimulai klien setelah mendapatkan dialog Pengaturan Keamanan, saya memindahkannya lebih tinggi dalam daftar di dialog proyek startup. Jika proyek klien berada di atas proyek server dalam daftar, tidak ada kesalahan, semua debug. Jika proyek klien berada di bawah proyek server, maka saya mendapatkan kesalahan dan klien tidak pernah terbuka. Ini tidak benar-benar MENYELESAIKAN masalah tetapi merupakan solusi yang sangat memadai untuk saya.

EDIT: Anda mungkin perlu menutup dan membuka kembali Visual Studio Anda agar solusi ini efektif.

10 MorrisS Aug 20 2018 at 20:57

Saya menghabiskan waktu berjam-jam mencoba mencari tahu masalahnya, ini menyelesaikannya.

Pergi ke Projct > Properties ...> Build

Hapus centang pada kotak Pilih 32-bit

4 jonmorgan Jul 21 2017 at 08:31

MS telah menghapus proses VS hosting di VS2017 - lihat

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

Karena ini mengubah pengaturan EnableSecurityDebugging di file pengguna proyek ke True hanya menghasilkan dialog Kesalahan muncul lagi saat run-time. Mengklik OK di dialog mengubah pengaturan file pengguna kembali ke False.

AFAIK tidak ada solusi meskipun MS tampaknya memposting pembaruan VS yang sangat sering (terbaru adalah 15,3) Sementara itu aplikasi ClickOnce. tidak akan dapat menggunakan opsi debugging keamanan.

4 Mats Jun 29 2018 at 09:22

Ini mungkin merupakan kesalahan di beberapa file konfigurasi. The "Enable ClickOnce security settings" sudah tidak ditandai di pengaturan proyek tetapi dialog ini masih muncul setiap kali aplikasi dimulai. Saya melakukan hal berikut untuk menghilangkan dialog ini:

  1. Buka proyek-> halaman pengaturan keamanan
  2. Tandai "Aktifkan pengaturan keamanan ClickOnce"
  3. Hapus tanda "Aktifkan pengaturan keamanan ClickOnce"
  4. Simpan properti dan mulai aplikasi lagi

Properti

1 jonmorgan Apr 08 2018 at 09:35

Berikut solusi yang memungkinkan saya untuk men-debug aplikasi ClickOnce saya. Di VS2017 tanpa mendapatkan pesan kesalahan "Tidak dapat menentukan identitas penelepon" saat mengakses Penyimpanan Terisolasi. Solusi juga harus bekerja dalam situasi apa pun yang memerlukan pengaturan keamanan ClickOnce.

Untuk membuat ulang pengaturan yang sebelumnya dibuat ketika pengaturan keamanan Aktifkan ClickOnce pada tab Keamanan properti proyek diperiksa, lakukan hal berikut:

1.Hapus centang Enable ClickOnce security settings pada tab Security properti proyek Anda

2. Tambahkan yang berikut ini ke file App.Config Anda jika belum ada

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

3. Tambahkan referensi ke Microsoft.Build.Tasks.v4.0 ke proyek Anda

Kode untuk membuat ulang pengaturan ClickOnce bisa pergi ke mana saja, tetapi contoh metode Utama berikut menggambarkan gagasan umum

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

Anda mungkin melihat pesan peringatan tentang proses VS Hosting tidak tersedia saat Anda pertama kali menjalankan kode di atas tetapi setelah itu pengaturan EnableSecurityDebugging di file pengguna proyek Anda akan disetel ke False dan kode harus berjalan seperti biasa.

Terima kasih kepada tim ClickOnce Microsoft atas bantuan mereka dalam pemecahan masalah ini.

1 javon27 Apr 11 2019 at 20:39

Saya memiliki alasan lain mengapa pesan ini mungkin muncul. Dalam kasus saya, saat menguji kloning solusi saya dari Git, saya melihat bahwa Visual Studio memutuskan untuk menetapkan platform solusi Aktif ke "Semua CPU", sedangkan proyek startup saya secara eksplisit menargetkan "x86". Hal ini menyebabkan proyek startup tidak dapat dibangun ketika saya menjalankan perintah solusi build.

Mencentang kotak Build di Pengelola Konfigurasi untuk proyek itu menghilangkan pesan kesalahan.

Jika ada yang bertanya, saya tidak ingat persis mengapa satu proyek itu secara eksplisit menargetkan x86.

1 MindyJ.Leslie Aug 22 2019 at 19:30

Saya baru saja mengalami masalah yang sama. Lebih suka 32-Bit dinonaktifkan. Saya melihat di Output Path dan itu bin \ Release.
Saya membuat jalur bin \ debug dan mengatur Jalur Output ke ini. Terselesaikan.

Matus Nov 20 2018 at 13:29

Bagi saya, solusinya adalah beralih ke "Aplikasi juga tersedia secara offline" di tab Publikasikan properti proyek

Sebelumnya saya memiliki "Aplikasi hanya tersedia online"

wagtod Sep 24 2020 at 17:21

Masalah saya tampaknya terkait dengan folder tempat solusi masuk. Solusi cabang DEV saya bekerja tanpa masalah tetapi cabang CERT (folder lokal yang berbeda) memberikan pesan Debugging Keamanan ketika pengaturan Keamanan ClickOnce diperiksa.

Solusi saya: luncurkan VS2019 sebagai Admin. Masalah hilang saat debugging. Dan sekarang saya dapat meluncurkan tanpa Admin dan debugging masih bagus.