vs2017设置支持java,VS 2017:已设置安全性调试选项,但它需要Visual Studio托管过程,该过程不可用...

这是一种解决方法,使我能够调试我的ClickOnce应用程序 . 在VS2017中,在访问独立存储时没有收到错误消息“无法确定调用方的身份” . 解决方法也适用于需要ClickOnce安全设置的任何情况 .

要重新创建先前在选中项目属性的“安全”选项卡上的“启用ClickOnce”安全设置时生成的设置,请执行以下操作:

1.取消选中在项目属性的“安全”选项卡上启用ClickOnce安全设置

2.如果尚未存在,请将以下内容添加到App.Config文件中

3.将Microsoft.Build.Tasks.v4.0的引用添加到您的项目中

重新创建ClickOnce设置的代码可以在任何地方进行,但以下示例Main方法说明了一般概念

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

{

///

/// The main entry point for the application.

///

[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团队对此解决方案的帮助 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值