Итак, у меня проблема с преобразованием проекта с открытым исходным кодом (SQLite) для использования другой системы сборки, и теперь у меня возникают проблемы при связывании проектов. По сути, у меня есть файл VCProj, который имеет такое определение:
<Tool
Name="VCLinkerTool"
AdditionalOptions="/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteCommand.bmp,System.Data.SQLite.SQLiteCommand.bmp
/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteConnection.bmp,System.Data.SQLite.SQLiteConnection.bmp
/ASSEMBLYRESOURCE:..\System.Data.SQLite\SQLiteDataAdapter.bmp,System.Data.SQLite.SQLiteDataAdapter.bmp"
AdditionalDependencies="..\System.Data.SQLite\bin\System.Data.SQLite.netmodule"
OutputFile="..\bin\System.Data.SQLite.DLL"
GenerateManifest="false"
IgnoreDefaultLibraryNames=""
ModuleDefinitionFile="src\sqlite3.def"
EmbedManagedResourceFile=""
DelayLoadDLLs="advapi32.dll"
RandomizedBaseAddress="1"
DataExecutionPrevention="0"
ImportLibrary=""
KeyFile="..\System.Data.SQLite\System.Data.SQLite.snk"
CLRUnmanagedCodeCheck="true"
/>
И я не могу правильно связать модуль System.Data.SQLite.net из-за следующей ошибки:
Связь ...
4> .. \ System.Data.SQLite \ bin \ System.Data.SQLite.netmodule: фатальная ошибка LNK1302: поддерживается только связывание безопасных .netmodules; невозможно связать чистый .netmodule
И модуль System.Data.SQLite.net создается из проекта C # / .NET. Как я могу заставить его скомпилировать с опцией /clr:safe
, так как в соответствии с MSDN это способ исправить проблему. Проблема в том, что я не знаю, как его скомпилировать с /clr:safe
. Как это я могу сделать это в файле csproj или в Visual Studio где-нибудь? Если я пытаюсь это исправить, дайте мне знать лучше.
UPDATE :
Итак, я определил проблему, но я не уверен, почему это проблема. Таким образом, проект взаимодействия (проект C, который компилирует sqlite-код и ссылки) использует VCLinkerTool для связи с модулем System.Data.SQLite.net. Затем существует проект C #, который создает модуль System.Data.SQLite.net с помощью следующей команды (что-то в {} было добавлено для сокращения длины):
C:\Windows\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe- /nowarn:1701,1702 /platform:AnyCPU /errorreport:prompt /doc:..\bin\System.Data.SQLite.XML {DLL REFEERENCFES /debug- /filealign:512 /optimize+ /out:obj\Release\System.Data.SQLite.netmodule {RESOURCES AND CS FILES}
Проблема с /platform:AnyCPU
. В моей сборке это /platform:x86
, и по какой-то причине это вызывает проблемы при соединении, и я не уверен, почему, но это то, к чему я его сузил, так как я могу изменить его на AnyCPU, и он будет собираться и связываться должным образом. Любое понимание этого приветствуется.