Предупреждение компилятора (уровень 1) CS1699
Обновлен: Ноябрь 2007
Сообщение об ошибке
Вместо "имя_атрибута" используйте параметр командной строки "параметр_компилятора" или подходящие параметры проекта
Use command line option "compiler_option" or appropriate project settings instead of "attribute_name"
Для того чтобы подписать сборку, необходимо указать файл ключа. В версиях, предшествовавших Microsoft Visual C# 2005, файл ключа указывался с помощью атрибутов среды CLR в исходном коде. Данные атрибуты теперь считаются устаревшими.
Начиная с версии Microsoft Visual C# 2005 для указания файла ключа следует использовать страницу Подписываниеконструктора проектов или компоновщик сборок.
Более предпочтительно использовать страницу Подписываниеконструктора проектов; дополнительные сведения см. в разделах Страница "Подписывание" в конструкторе проектов и Управление сборками и подписывание манифестов.
В разделе Практическое руководство. Подписание сборки строгим именем описано использование следующих параметров компилятора.
Параметр /keyfile (указать файл с ключом строгого имени) (параметры компилятора C#) вместо атрибута AssemblyKeyFileAttribute.
/keycontainer (указание строгого имени контейнера ключа) (параметры компилятора C#)вместо атрибутаAssemblyKeyNameAttribute.
/delaysign (отложенная подпись сборки) (параметры компилятора C#) вместо атрибута AssemblyDelaySignAttribute.
Данные атрибуты устарели по указанным ниже причинам.
В результате внедрения атрибутов в двоичные файлы, создаваемые компилятором, возникали проблемы безопасности. Получив двоичный файл, можно было просмотреть содержащиеся в нем ключи.
Возникали проблемы удобства работы, поскольку пути указывались в атрибутах относительно текущего рабочего каталога, который мог измениться в интегрированной среде разработки, или выходного каталога. Таким образом, в большинстве случает файл ключа указывался в следующем виде: ..\\..\\mykey.snk. Атрибуты также затрудняли процесс подписи системой проекта вспомогательных сборок. Если вместо атрибутов используются параметры компилятора, можно указывать полный путь и имя файла для ключа, не внедряя данные в выходной файл; система проекта и система управления версиями могут корректно управлять указанным полным путем при перемещении проектов; система проекта может поддерживать путь к файлу ключа относительно структуры каталогов проекта, а компилятору передавать полный путь; другим программам построения стало проще подписывать выходные файлы посредством передачи соответствующего пути непосредственно компилятору вместо того, чтобы создавать файл исходного кода с правильными атрибутами.
Использование атрибутов с дружественными сборками может привести с снижению производительности компилятора. Если используются атрибуты, то при принятии решения о предоставлении статуса дружественной сборки компилятору приходится строить предположения, поскольку ему не известен ключ. После завершения компиляции, когда ключа уже известен, компилятор может проверить свое предположение. Если ключ указывается с помощью параметра, компилятор может немедленно принять решение, следует ли предоставлять статус дружественной сборки.
Пример
Этот пример приводит к возникновению ошибки CS1699. Для устранения этой ошибки удалите атрибут и выполните компиляцию с параметром /delaysign.
// CS1699.cs
// compile with: /target:library
[assembly:System.Reflection.AssemblyDelaySign(true)] // CS1699
См. также
Задачи
Практическое руководство. Подписание сборки строгим именем
Ссылки
Страница "Подписывание" в конструкторе проектов