Я пытаюсь использовать NAnt для компиляции и подписи сборки с помощью компилятора vbc. У меня есть проект, и я могу успешно подписать сборку, компилируемую с помощью VS2010. Когда я пытаюсь подписать его с помощью командной строки, я получаю эту ошибку:
vbc : error BC30140: Error creating assembly manifest: Error signing assembly -- The parameter is incorrect.
Я даже создал тривиально простое приложение (просто файл Assemblyinfo.vb), которое не будет компилироваться и подписываться с помощью vbc.exe. Что я делаю неправильно?
вот моя сборкаinfo.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
и попытался использовать параметр /keyfile без атрибутов AssemblyDelaySign и AssemblyKeyFile
Если я удалю атрибуты AssemblyDelaySign и AssemblyKeyFile и оставлю параметр командной строки /keyfile, он компилируется нормально. Как правильно это сделать с vbc?
--EDIT: я обнаружил, что MSBuild также не нравится наличие атрибута AssemblyKeyFile, как я определил его в AssemblyInfo.vb, он выдает то же сообщение об ошибке. Таким образом, единственный способ, которым я могу в настоящее время заставить это построить правильно, - это установить свойства проекта, чтобы сообщить ему, какой ключевой файл использовать, и подписать сборку.
--EDIT: причина, по которой это работает при создании проекта из VS2010, заключается в том, что msbuild передает /keycontainer в vbc.exe в командной строке вместо использования /keyfile. До сих пор не знаю, как использовать параметр командной строки /keyfile.