Сборка System.Data.SQLite из Source, Сборка с Target Framework 4.0 - PullRequest
1 голос
/ 11 ноября 2011

Я пытаюсь собрать System.Data.SQLite в Visual Studio, используя исходный код, загруженный с

http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

Мне удалось построить решение, но когда я попытался сослаться на System.Data.SQLite.dll из проекта с TargetFramework = 3.5, я получил следующее сообщение:

"System.Data.SQLite.dll или одна из его зависимостей, требуется более поздняя версия версия .NET Framework, отличная от указанной в проекте. "

Я заметил, что их управляемые проекты (System.Data.SQLite.2010, System.Data.SQLite.Linq.2010 и System.Data.SQLite.Module.2010) были настроены на работу с .NET 4.0. Затем я изменил их все на ссылку 3.5, перестроил и попытался снова. Затем я смог сослаться на проект, однако я получил новую ошибку времени выполнения:

"Не удалось oad файл или сборку 'System.Data.SQLite' или один из его зависимостей. Эта сборка создается средой выполнения, более новой, чем в данный момент загружено и не может быть загружено. "

Я открыл .dll с помощью ildasm, и манифест действительно говорит: // версия метаданных: v4.0.30319 Это не имеет смысла для меня, потому что их документация ясно утверждает, что он должен работать с .NET 2.0:

". Мы хотим поставлять управляемые двоичные файлы, основанные на .NET Framework 2.0 SP2 (или для сборки LINQ .NET Framework 3.5 SP1). Сеть Framework 2.0 широко распространен, и для него могут быть созданы двоичные файлы. также можно ссылаться и успешно использовать из проектов, использующих .NET Framework 4.0. «

http://system.data.sqlite.org/index.html/doc/trunk/www/build.wiki

Это решение - своего рода кошмар, с множеством целевых файлов и множеством настраиваемых параметров сборки. Я не совсем уверен, где целевые рамки устанавливаются. Я предполагаю, что где-то происходит волшебство.

У кого-нибудь есть опыт создания этого проекта? Любая помощь будет оценена. Спасибо!

Ответы [ 2 ]

2 голосов
/ 19 ноября 2011

Ключом к созданию решения System.Data.SQLite в Visual Studio 2010, предназначенного для версии 3.5, является знание того, что проекты VC ++ (SQLite.Interop.2010 и SQLite.Interop.Static) нацелены на платформу версии 4.0 по умолчанию.В то время как вы правильно настроили v3.5 для проектов C # (System.Data.SQLite.2010 и System.Data.SQLite.Linq.2010), вероятно, было неясно, как перевернуть целевую версию для проектов VC ++.

Предложенный Microsoft подход к изменению версий фреймворка в VC ++ состоит в том, чтобы выгрузить проект из Visual Studio 2010. Затем откройте текстовый редактор, найдите ваш .vcxproj в каталоге решений и вставьте тег TargetFrameworkVersion сзначение "v3.5" в теге PropertyGroup "Globals".После повторной загрузки проекта в Visual Studio 2010 вы должны увидеть version = 3.5 в разделе Framework и References свойств проекта. Ссылка на ссылку

Для System.Data.SQLite эту операцию необходимо выполнить для обоих проектов VC ++ (SQLite.Interop.2010 и SQLite.Interop.Static).ПРИМЕЧАНИЕ. Если вы попытаетесь нацелить проекты VC ++ на платформу версии 3.5 в Visual Studio 2010, вам также потребуется установить Visual Studio 2008 SP1 (VC 9.0).Кроме того, если вы хотите скомпилировать для x64 в VC ++ 2010 на платформе версии 3.5, вам нужно будет установить x64-компилятор и инструменты в Visual Studio 2008 SP1 (VC 9.0) (не установлен по умолчанию).

После перекомпиляции ildasm должен показать «версию метаданных: v2.0.50727» в манифесте для System.Data.SQLite.dll

Я заметил, что после перехода решения VS2010 на версию платформы3.5, что в System.Data.SQLite.Linq.2010 появились новые ошибки сборки из-за того, что автор ссылается на ресурсы «Свойства» (т. Е. Resources.resx) в коде.

1 голос
/ 19 ноября 2011

Это может быть вызвано сборкой с использованием VS2010, которая, по моему мнению, использует настройку ToolsVersion 4.0 по умолчанию.В этот zip-файл включен файл решения MSBuild для VS2008 (по умолчанию используется ToolsVersion версии 3.5).Я подозреваю, что создание этого файла решения с использованием версии MSNET для .NET 3.5 даст вам DLL, совместимую с версией 3.5.

"C: \ Windows \ Microsoft.NET \ Framework \ v3.5 \ MSBuild.exe "" "

...