3

我正在尝试使用 NAnt 来使用 vbc 编译器编译和签署程序集。我已经建立了一个项目,并且能够成功签署使用 VS2010 编译的程序集。当我尝试使用命令行对其进行签名时,我收到此错误:

vbc : error BC30140: Error creating assembly manifest: Error signing assembly -- The parameter is incorrect.

我什至创建了一个非常简单的应用程序(只是一个 assemblyinfo.vb 文件),它不会使用 vbc.exe 进行编译和签名我做错了什么?

这是我的 assemblyinfo.vb:

Option Strict Off
Option Explicit On

Imports System
Imports System.Reflection
<Assembly: AssemblyVersionAttribute("2010.05.18.0918"),  _
 Assembly: AssemblyCopyrightAttribute("Copyright © Patient First 2007"),  _
 Assembly: AssemblyCompanyAttribute("Patient First, Inc."),  _
 Assembly: AssemblyProductAttribute("Patient First Framework"),  _
 Assembly: AssemblyDelaySign(false),  _
 Assembly: AssemblyKeyFile("test.pfx"), _
 Assembly: AssemblyTitleAttribute("PatientFirst.Framework")>

test.pfx 与 assemblyinfo.vb 位于同一文件夹中

这是我尝试编译它的方式:

vbc /target:library /verbose assemblyinfo.vb

我也尝试过使用

vbc /target:library /verbose assemblyinfo.vb /keyfile:test.pfx

并尝试使用没有 AssemblyDelaySign 和 AssemblyKeyFile 属性的 /keyfile 参数

如果我删除 AssemblyDelaySign 和 AssemblyKeyFile 属性并省略 /keyfile 命令行参数,它编译得很好。使用 vbc 执行此操作的正确方法是什么?

--编辑:我发现 MSBuild 也不喜欢像我在 AssemblyInfo.vb 中定义的那样具有 AssemblyKeyFile 属性,它给出了相同的失败消息。因此,我目前可以正确构建它的唯一方法是在项目上设置属性以告诉它要使用哪个密钥文件并签署程序集。

--编辑:这似乎可以在 VS2010 中构建项目的原因是 msbuild 在命令行上将 /keycontainer 传递给 vbc.exe,而不是使用 /keyfile。仍然不知道如何使用 /keyfile 命令行参数。

4

1 回答 1

1

我发现 MSBuild 也不喜欢像我在 AssemblyInfo.vb 中定义的那样具有 AssemblyKeyFile 属性,它给出了相同的失败消息。因此,我目前可以正确构建它的唯一方法是在项目上设置属性以告诉它要使用哪个密钥文件并签署程序集。

似乎可以从 VS2010 中构建项目的原因是 msbuild 在命令行上将 /keycontainer 传递给 vbc.exe,而不是使用 /keyfile。仍然不知道如何使用 /keyfile 命令行参数。

于 2010-10-04T14:11:38.913 回答