Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 如何在Visual Studio 2013中禁用调试生成的代码签名?_Visual Studio 2010_Visual Studio 2013_Clickonce_Code Signing - Fatal编程技术网

Visual studio 2010 如何在Visual Studio 2013中禁用调试生成的代码签名?

Visual studio 2010 如何在Visual Studio 2013中禁用调试生成的代码签名?,visual-studio-2010,visual-studio-2013,clickonce,code-signing,Visual Studio 2010,Visual Studio 2013,Clickonce,Code Signing,我们最近将VisualStudio从2010年升级到2013年,除了一件事之外,一切似乎都和以前一样。2010年,代码签名仅在发布项目时执行,但2013年,它希望在每次构建项目时对输出程序集进行签名 我在尝试在线查找有关此的任何结果时遇到问题,所有内容都只指向如何首先设置签名,而不是如何在正常调试构建期间阻止签名 我创建了一个新项目,并开始使用设置来确定在正常构建过程中触发签名要求的单个设置。在“安全”选项卡下的“项目属性”页面中,如果选中“启用ClickOnce安全设置”复选框,则2013年

我们最近将VisualStudio从2010年升级到2013年,除了一件事之外,一切似乎都和以前一样。2010年,代码签名仅在发布项目时执行,但2013年,它希望在每次构建项目时对输出程序集进行签名

我在尝试在线查找有关此的任何结果时遇到问题,所有内容都只指向如何首先设置签名,而不是如何在正常调试构建期间阻止签名


我创建了一个新项目,并开始使用设置来确定在正常构建过程中触发签名要求的单个设置。在“安全”选项卡下的“项目属性”页面中,如果选中“启用ClickOnce安全设置”复选框,则2013年需要签名步骤,但2010年似乎没有该要求

我仍然需要确认这是否是这种行为的唯一决策点


确认

我创建了两个解决方案,每个解决方案都有一个空的WinForms应用程序。一个解决方案是在Visual Studio 2010中创建的,另一个是在Visual Studio 2013中创建的。我进入每个项目的项目属性,并通过“签名”选项卡启用签名,然后在“安全”选项卡中的“启用ClickOnce安全设置”中选择“这是一个完全信任的应用程序”。请注意,项目是使用智能卡上的证书签名的,该智能卡已启用PIN

VS 2013在调试模式下的正常构建期间提示输入智能卡PIN,2010不会。现在的问题基本上是为什么这两个版本之间存在差异,以及如何在2013年解决这一问题,使其表现得像2010年一样


我在下面包含了我创建的测试解决方案的项目文件。比较这些差异并不意味着有什么明显的不同。我还尝试更改VS 2013项目,以与VS 2010项目相同的框架为目标,以最小化项目之间的差异-这不会改变行为差异

VisualStudio2010项目文件


调试
x86
8.0.30703
2
{E31DA60C-E444-4E34-AF6D-5B4588CC1F8E}
温克斯
性质
签约测试1
签约测试1
v4.0
客户
512
x86
真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
x86
pdbonly
真的
bin\Release\
痕迹
促使
4.
真的
22E252B5076264F4F2CD88983A9053D554CCD185
局域网
真的
属性\app.manifest
形式
表格1.cs
ResXFileCodeGenerator
Resources.Designer.cs
设计师
真的
Resources.resx
设置单个文件生成器
Settings.Designer.cs
真的
设置。设置
真的
Visual Studio 2013项目文件


调试
任意CPU
{732A657C-452D-4942-8832-89A14314739C}
温克斯
性质
2013年签约测试
2013年签约测试
v4.0
客户
512
任意CPU
真的
满的
假的
bin\Debug\
调试;痕迹
促使
4.
任意CPU
pdbonly
真的
bin\Release\
痕迹
促使
4.
真的
22E252B5076264F4F2CD88983A9053D554CCD185
局域网
真的
属性\app.manifest
形式
表格1.cs
ResXFileCodeGenerator
Resources.Designer.cs
设计师
真的
Resources.resx
真的
设置单个文件生成器
Settings.Designer.cs
真的
设置。设置
真的

我将尝试在可能的情况下为每个项目上传完整的解决方案。由于大多数文件共享网站被阻止,我无法在当前计算机上执行此操作。

这篇文章包含了迄今为止针对行为改变找到的最佳解决方案。该解决方案由以下人员提出:

对于需要代码签名的项目,请打开其关联的
.csproj
文件。您应该能够在该文件中列出的
PropertyGroup
节点中找到
SignManifests
节点,如下所示:


真的
此属性显示在VS2010和VS2013项目文件中,并在项目范围中列出。您应该能够找到两个不同的
属性组
节点,它们看起来类似于以下内容:


这些
PropertyGroup
节点定义项目属性,这些属性在构建项目时根据当前配置和目标平台有条件地应用

您需要删除第一次找到的
SignManifests
节点,并在每个条件
PropertyGroup
节点中放置一个新的
SignManifests
节点:


假的
真的
这将使VS2013表现得更好一些。在发布构建期间(在以
AnyCPU
为目标的示例发布构建中),VS2013将尝试对清单进行签名,而在调试模式下则不会

此解决方案的几个注意事项:

  • 启用ClickOnce签名时,VS2010的行为并非如此。VS2010将仅在ClickOnce发布期间进行签名,而在生成期间不进行签名(无论配置和目标平台如何)
  • 如果在VS2013中打开项目属性的“签名”选项卡,则会显示未启用ClickOnce签名(无论配置和目标平台如何)。不要让它愚弄你,它仍然会在发布版本期间进行属性签名。选中此选项卡上的复选框将在
    Pro重新添加
    SignManifests
    节点