2014-10-20 8 views
0

Я создаю сборку CLR для SQL Server 2008, которая поддерживает только сборки .NET 2.0. Кроме того, SQL Server также требует наличия сильного ключа с каждой сборкой, которую вы хотите зарегистрировать.Подписание беззнаковой сборки и таргетинга .NET 2.0 с помощью ilasm.exe

Сборка Я пытаюсь создать ссылки на версию .NET 2.0 для json.net (https://json.codeplex.com/). Однако мой проект не может сгенерировать SNK-файл, так как сам Newtonsoft.Json.dll не имеет знака. (По крайней мере, это ошибка я получаю, когда я пытаюсь построить мой проект и подписать его.)

Я получил вокруг этого, используя трюк, описанный здесь: http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

Однако при сборке Newtonsoft.Json.dll с SNK моего проекта, он должен генерировать DLL с целевой структурой выше, чем .NET 2.0. Я знаю это, потому что я получаю следующее сообщение об ошибке в SQL Server:

CREATE ASSEMBLY for assembly 'Newtonsoft.Json' failed because the assembly is built for an unsupported version of the Common Language Runtime. 

Кто-нибудь знает, как сделать ilasm.exe генерировать сборку в целевой платформе .NET 2.0? Или, может быть, я вообще совсем не подхожу к проблеме - если есть лучшее решение для использования Newtonsoft.Json в сборке CLR в 2008 году, я бы с удовольствием узнал. Спасибо!

+0

Вам действительно нужно * json * в сборке, используемой в SQL Server? Если вы на самом деле не используете его, просто удалите ссылку. – acfrancis

+0

@acfrancis - Я абсолютно согласен с тем, что такого рода функциональность не должна быть в CLR.Однако, учитывая ограничения моего проекта, мне нужно уметь интерпретировать json через хранимую процедуру SQL. Это ужасно, я знаю, но это нужно сделать. Вы знаете какой-либо более простой способ сделать это, кроме использования Newtonsoft.Json? Опять же, единственной функцией, которая мне нужна, является возможность декодирования json-документа в объект внутри C#. – cody

ответ

3

Убедитесь, что вы запустили ilasm из нужного каталога. Каждая версия .NET Framework имеет свои инструменты в другом каталоге.

Если вы используете один из PATH, вы можете ввести where ilasm в командной строке, чтобы узнать, какая версия находится.

Я подозреваю, этот совет из блога вы связаны приводит вас в заблуждение

Нам нужно открыть командную строку, которая имеет рамочные .NET исполняемые файлы в переменной PATH среды. Самый простой способ сделать это - открыть командную строку Visual Studio (которая обычно находится в подпапке «Visual Studio Tools» в «Visual Studio 20XX» в меню ваших программ).

Нет упоминания о версии или о том, что среда выполнения .NET Framework установила инструменты для большего количества версий, чем установки Visual Studio.

К примеру, на моей системе я имею ILASM в

C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727

, а также

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

(и другие))

Запуск v4, который я получаю от «Visual Studio 2013 x64 Native Tools Command Prompt», создаст .NET-совместимую сборку, при запуске v2 создается сборка .NET 2.

+0

Это сработало - я использовал 2.0 версию ilasm и не имел проблем. Тем не менее, я обнаружил, что Newtonsoft.Json имеет всевозможные статические поля, поэтому я не могу зарегистрировать его, если я не установлю external_access = небезопасно (чего я не могу сделать). – cody

+0

Пока мы здесь, знаете ли вы какую-нибудь легкую, простую библиотеку, которая будет декодировать json-документ в объект? Это единственная функция, которую я ищу, которая требуется для моей среды CLR. – cody

+0

@ambient: Извините, я не очень использую JSON, поэтому я не знаю, какие варианты существуют для .NET или для SQL-сервера. –