使用命令行编译强命名程序集

时间:2010-05-18 14:03:41

标签: .net vb.net strongname vbc vb.net-2010

我正在尝试使用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也不喜欢具有AssemblyKeyFile属性,因为我在AssemblyInfo.vb中定义了它,它给出了相同的失败消息。所以我目前唯一可以正确构建它的方法是在项目上设置属性,告诉它使用哪个密钥文件并签署程序集。

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

1 个答案:

答案 0 :(得分:1)

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

出现从VS2010内部构建项目的原因是msbuild在命令行上将/ keycontainer传递给vbc.exe而不是使用/ keyfile。仍然不知道如何使用/ keyfile命令行参数。