我想开发一个.tt模板来从SQLite数据库生成POCO。
我使用SharpDevelop 4.4。
这是我到目前为止的.tt ...
<#@ template hostspecific="true" language="C#" #>
<#@ output extension=".txt" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Data.SQLite" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SQLite" #>
<#@ import namespace="System.IO" #>
<#
using (SQLiteConnection db =
new SQLiteConnection
(string.Format("Data Source={0}",
Path.Combine(Path.GetDirectoryName(Host.TemplateFile),
"Test.db"))))
{
db.Open();
}
#>
我将 System.Data.SQLite.1.0.92.0 NuGet包添加到我的项目中,以便让SQLite正常工作。
当我运行模板时,我遇到以下错误:
Error running transform: System.DllNotFoundException: Unable to load DLL 'SQLite.Interop.dll': Le module spécifié est introuvable. (Exception from HRESULT: 0x8007007E)
at System.Data.SQLite.UnsafeNativeMethods.sqlite3_config_none(SQLiteConfigOpsEnum op)
at System.Data.SQLite.SQLite3.StaticIsInitialized()
at System.Data.SQLite.SQLiteLog.Initialize()
at System.Data.SQLite.SQLiteConnection..ctor(String connectionString, Boolean parseViaFramework)
at System.Data.SQLite.SQLiteConnection..ctor(String connectionString)
at Microsoft.VisualStudio.TextTemplating.GeneratedTextTransformation5e95cd16.TransformText()
at Mono.TextTemplating.CompiledTemplate.Process()
对不起法语留言...“Lemodulespécifiéestintrouvable”表示“无法找到指定的模块”...
看起来SharpDevelop设法从我的项目中找到 System.Data.SQLite.dll 文件,但未能找到它的本机对应 SQLite.Interop.dll ..
我怎样才能让SharpDevelop找到DLL ???
有什么想法吗?
一旦我弄清楚如何让SharpDevelop找到DLL并连接到我的数据库,模板的其余部分应该非常直接地实现...
感谢您的帮助!
Ghis
答案 0 :(得分:1)
SharpDevelop将找到您的System.Data.SQLite.dll,因为您的项目将引用它。
我的第一个想法是:
对于SQLite.Interop.dll,您可以在项目中添加对它的引用,或者如果您不想这样做,则可以指定.dll的路径。您应该可以执行以下操作:
<#@ assembly name="$(SolutionDir)packages\System.Data.SQLite.Core.1.0.92.0\content\net45\x86\SQLite.Interop.dll" #>
不幸的是,由于SQLite.Interop.dll不是.NET程序集,因此不起作用。因此,解决方法/黑客将通过将SharpTvelop放在路径上来使SQLite.Interop.dll可用。最简单的方法是将其复制到SharpDevelop的bin文件夹中:
C:\Program Files (x86)\SharpDevelop\4.4\bin
答案 1 :(得分:1)
感谢@ matt-ward输入,我终于明白了!
我使用Process Monitor找出SharpDevelop在寻找DLL的位置..这就是我发现的......
C:\Users\ghigad\Projets\CS\TestT4\packages\System.Data.SQLite.Core.1.0.92.0\lib\net40\x86\SQLite.Interop.dll
C:\Users\ghigad\Projets\CS\TestT4\packages\System.Data.SQLite.Core.1.0.92.0\lib\net40\Win32\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\x86\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\Win32\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\ADDINS\MISC\TEXTTEMPLATING\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\x86\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\Win32\SQLite.Interop.dll
C:\Users\ghigad\Projets\CS\TestT4\packages\System.Data.SQLite.Core.1.0.92.0\lib\net40\x86\SQLite.Interop.dll
C:\Users\ghigad\Projets\CS\TestT4\packages\System.Data.SQLite.Core.1.0.92.0\lib\net40\Win32\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\x86\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\Win32\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\ADDINS\MISC\TEXTTEMPLATING\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\x86\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\AddIns\Misc\TextTemplating\Win32\SQLite.Interop.dll
C:\Users\ghigad\Projets\CS\TestT4\packages\System.Data.SQLite.Core.1.0.92.0\lib\net40\SQLite.Interop.dll
C:\Program Files (x86)\SharpDevelop\4.4\bin\SQLite.Interop.dll
C:\Windows\SYSWOW64\SQLite.Interop.dll
C:\Windows\system\SQLite.Interop.dll
C:\Windows\SQLite.Interop.dll
C:\Windows\SYSWOW64\SQLite.Interop.dll
C:\Program Files\Common Files\Microsoft Shared\Windows Live\SQLite.Interop.dll
C:\Program Files (x86)\COMMON FILES\MICROSOFT SHARED\Windows Live\SQLite.Interop.dll
C:\Program Files\Java\jdk1.6.0_30\bin\SQLite.Interop.dll
C:\Program Files\apache-ant-1.8.2\bin\SQLite.Interop.dll
C:\cygwin\bin\SQLite.Interop.dll
C:\Windows\SYSWOW64\SQLite.Interop.dll
C:\Windows\SQLite.Interop.dll
C:\Windows\SYSWOW64\wbem\SQLite.Interop.dll
C:\Windows\SYSWOW64\WindowsPowerShell\v1.0\SQLite.Interop.dll
C:\Program Files\Intel\WiFi\bin\SQLite.Interop.dll
C:\Program Files\Common Files\Intel\WirelessCommon\SQLite.Interop.dll
C:\Program Files (x86)\COMMON FILES\Roxio Shared\DLLShared\SQLite.Interop.dll
C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\SQLite.Interop.dll
C:\Program Files (x86)\Common Files\Roxio Shared\OEM\DLLShared\SQLite.Interop.dll
C:\Program Files (x86)\COMMON FILES\Roxio Shared\OEM\12.0\DLLShared\SQLite.Interop.dll
C:\Program Files (x86)\Roxio\OEM\AudioCore\SQLite.Interop.dll
C:\Program Files (x86)\MICROSOFT SQL SERVER\100\Tools\Binn\SQLite.Interop.dll
C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLite.Interop.dll
C:\Program Files\Microsoft SQL Server\100\DTS\Binn\SQLite.Interop.dll
C:\Program Files (x86)\MICROSOFT SQL SERVER\100\Tools\Binn\VSShell\Common7\IDE\SQLite.Interop.dll
C:\Program Files (x86)\MICROSOFT SQL SERVER\100\DTS\Binn\SQLite.Interop.dll
C:\Program Files\TortoiseSVN\bin\SQLite.Interop.dll
C:\Program Files (x86)\QuickTime\QTSystem\SQLite.Interop.dll
C:\Program Files (x86)\Windows Live\Shared\SQLite.Interop.dll
因此,事实证明搜索了不少目录,然后我的PATH变量的内容用于搜索文件......
Matt关于将dll放在SharpDevelop的bin目录中的想法可行,但我不喜欢在应用程序目录中保存文件的想法......这意味着我必须重新复制文件如果我将SharpDevelop更新为更新的版本......
从日志中,我想将... / packages / content / net40 / x86中的dll复制到... / packages / lib / net40 / x86也可以完成这个诀窍......同样的事情......如果我愚弄SQLite的Nuget包目录结构,每次我都会从源代码控制中检查我的代码或升级到更新的版本,我将不得不再次复制该文件......
我最终决定将DLL复制到C:\ Program File(x86)目录中,并将其添加到我的PATH中。
效果很好!
谢谢Matt让我走上正轨!