programing

VS 2017 : 보안 디버깅 옵션이 설정되었지만 사용할 수 없는 Visual Studio 호스팅 프로세스가 필요합니다.

starjava 2023. 4. 12. 21:41
반응형

VS 2017 : 보안 디버깅 옵션이 설정되었지만 사용할 수 없는 Visual Studio 호스팅 프로세스가 필요합니다.

내 솔루션(수십 개의 프로젝트를 포함)은 Visual Studio 2013에서 완벽하게 작동합니다.

Visual Studio 2017에서는 솔루션을 열고 컴파일할 수 있습니다.

그러나 디버깅을 시작하면 다음 오류 메시지가 나타납니다.

보안 디버깅 옵션이 설정되었지만 이 디버깅 구성에서는 사용할 수 없는 Visual Studio 호스팅 프로세스가 필요합니다.보안 디버깅 옵션이 비활성화됩니다.이 옵션은 보안 속성 페이지에서 다시 활성화할 수 있습니다.보안 디버깅 없이 디버깅세션이 계속됩니다.

여기에 이미지 설명 입력

그리고 아무 일도 일어나지 않아요.시동이 걸리지 않는다.

참고로 이 솔루션은 여러 스타트업 프로젝트(WPF 프로젝트 포함)가 있는 솔루션입니다.

편집 : [프로젝트]-> [속성]-> [보안]탭의 [클릭 원스 보안 설정 활성화]옵션을 무효로 하면 동작합니다.

이것으로 문제가 해결되었습니다.

대부분의 경우 실수로 ClickOnce 보안 설정을 사용하여 디버깅으로 전환됩니다.앱의 프로젝트 속성을 가져와 "보안" 탭으로 이동한 다음 "클릭 원스 보안 설정 활성화"를 선택 취소하거나 "완전 신뢰 응용프로그램입니다" 라디오 버튼을 선택하십시오.

다른 사람에게 도움이 되는 경우 - 같은 시나리오 - ClickOnce와 함께 도입되는 클라이언트를 포함하는 여러 스타트업 솔루션Security Settings(보안 설정) 대화 상자가 열린 후 클라이언트가 시작되지 않는 문제를 제거하기 위해 시작 프로젝트 대화 상자의 목록에서 상위 항목으로 이동했습니다.클라이언트 프로젝트가 목록의 서버 프로젝트 위에 있는 경우 오류는 발생하지 않고 모든 것이 디버깅됩니다.클라이언트 프로젝트가 서버 프로젝트 아래에 있으면 오류가 발생하고 클라이언트는 열리지 않습니다.이것이 정확히 문제를 해결하지는 못하지만 나에게 완벽하게 적절한 해결책이다.

편집: 이 해결 방법을 적용하려면 Visual Studio를 닫았다가 다시 열어야 할 수 있습니다.

몇 시간 동안 문제를 해결하려고 노력했고, 이것으로 해결되었습니다.

[ Projct ]> [ Properties ]으로 이동합니다.> 빌드

[ 32 - bit ]체크박스를 끄겠습니다

여기에 이미지 설명 입력

MS는 VS2017에서 VS호스팅 프로세스를 삭제했습니다.를 참조해 주십시오.

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

따라서 프로젝트 사용자 파일의 EnableSecurityDebugging 설정을 True로 변경하면 런타임에 오류 대화 상자가 다시 나타납니다.대화상자에서 확인을 클릭하면 사용자 파일 설정이 다시 False로 변경됩니다.

AFIK는 MS가 VS 업데이트를 자주 게시하고 있는 것 같지만 회피책은 없습니다(최신 15.3). 그 사이에 ClickOnce 앱은 보안 디버깅옵션을 사용할 수 없게 됩니다.

이는 일부 구성 파일의 결함일 수 있습니다."클릭 원스 보안 설정 활성화"는 프로젝트 설정에서 이미 표시되어 있지 않지만 응용 프로그램을 시작할 때마다 이 대화상자가 나타납니다.이 대화를 없애기 위해 다음을 수행했습니다.

  1. 프로젝트 -> 보안 설정 페이지를 엽니다.
  2. "클릭원스 보안 설정 활성화" 표시
  3. "ClickOnce 보안 설정 활성화" 표시를 해제합니다.
  4. 속성을 저장하고 응용 프로그램을 다시 시작합니다.

특성.

다음은 ClickOnce 앱을 디버깅할 수 있는 해결 방법입니다."Unable to determinate of caller identity of caller"라는 오류 메시지가 표시되지 않고 VS2017에서 격리 스토리지에 액세스할 수 있습니다.이 회피책은 ClickOnce 보안 설정이 필요한 상황에서도 유효합니다.

프로젝트 속성의 보안 탭에서 클릭원스 보안 설정 실행을 선택할 때 이전에 생성된 설정을 재생성하려면 다음을 수행하십시오.

1. 프로젝트 속성의 [보안]탭에서 [클릭원스 보안 설정 활성화]체크박스를 끄겠습니다

2. 앱에 다음 항목을 추가합니다.구성 파일이 없는 경우

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

3. Microsoft에 대한 참조를 추가합니다.프로젝트에 대한 Build.Tasks.v4.0

ClickOnce 설정을 다시 작성하기 위한 코드는 어디에나 사용할 수 있지만 다음 샘플 메인 메서드는 일반적인 아이디어를 보여줍니다.

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 팀이 이 회피책에 도움을 준 덕분입니다.

이 메시지가 뜨는 또 다른 이유가 있습니다.제 경우 Git에서 솔루션을 복제하는 테스트를 하는 동안 Visual Studio가 액티브 솔루션 플랫폼을 "Any CPU"로 설정하기로 결정한 반면, 제 스타트업 프로젝트는 "x86"을 목표로 하고 있다는 것을 알게 되었습니다.이로 인해 build solution 명령을 실행해도 스타트업 프로젝트가 빌드되지 않았습니다.

해당 프로젝트의 Configuration Manager에서 [빌드(Build)]박스를 켜면 오류 메시지가 삭제되었습니다.

누가 물어보면 왜 그 프로젝트 하나가 x86을 명시적으로 목표로 했는지 정확히 기억나지 않습니다.

나도 같은 문제가 있었어기본 설정 32비트가 비활성화되었습니다.출력 경로를 살펴보니 bin\Release로 되어 있었습니다.
bin\debug 경로를 만들고 출력 경로를 이렇게 설정했습니다.해결했습니다.

프로젝트 속성의 [공개(Publish)]탭에서 [어플리케이션은 오프라인에서도 사용할 수 있습니다(The Application is available offline)]로 전환했습니다.

이전에 "응용 프로그램은 온라인에서만 이용 가능합니다"라고 했습니다.

문제가 해결 방법이 있는 폴더와 관련된 것 같습니다.DEV 브랜치솔루션은 문제없이 동작했지만 ClickOnce Security 설정이 확인되었을 때 CERT 브랜치(다른 로컬폴더)에서 Security Debugging 메시지가 표시되었습니다.

솔루션: 관리자로서 VS2019를 기동합니다.디버깅하면 문제가 없어진다.이제 관리자 없이도 시작할 수 있으며 디버깅은 여전히 유효합니다.

이유를 설명하지 않고 빠른 해결 방법: "디버깅" 구성에서 응용 프로그램을 실행하면 오류가 중지되고 응용 프로그램이 실행될 수 있습니다.

언급URL : https://stackoverflow.com/questions/44821734/vs-2017-the-security-debugging-option-is-set-but-it-requires-the-visual-studio

반응형