Vim*_*mes 17 .net c# sqlite interop visual-studio
我从NuGet安装了System.Data.SQLite Core(x86/x64).它建立时没有任何警告,但投掷System.DllNotFoundException了SQLite.Interop.dll.我操纵我的项目将SQLite.Interop.dllNuGet包的目录下的副本复制到输出目录,现在它运行没有异常.
为什么NuGet包没有配置我的项目将相应的interop dll放在输出目录中?似乎它应该能够做到这一点.
我是interop的新手,我继承了这个以前System.Data.SQLite.dll直接由path 引用的代码库.我转而使用NuGet来摆脱有关项目处理器架构与之间不匹配的警告System.Data.SQLite.我正在尝试将所有项目构建为AnyCPU.
Ste*_*fan 13
将其复制到您的项目文件:
<PropertyGroup>
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
<CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
<CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
<CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
源:SQLite.Interop.dll文件在引用的项目需要时不会复制到项目输出路径
就我而言,问题在于我在一个类库项目中使用SQLite,然后由另一个WPF(gui类型)项目使用.
解决了SQL.Interop.dll没有被复制到输出目录,在Project Properties - > Build Events中使用以下Post-Build命令:
xcopy "$(SolutionDir)packages\System.Data.SQLite.Core.1.0.101.0\build\net451\x86\SQLite.Interop.dll" "$(OutputDir)" /y /f
/y overwrites
/f displays actual filenames being copied
Run Code Online (Sandbox Code Playgroud)
我认为这是发生的,因为我在部署它们时将文件从输出文件夹复制到另一个位置.我错过了正在复制的互操作文件这一事实,但它们被复制到输出文件夹中的x64和x86文件夹.
如果在项目的debug中运行msbuild,则可以查找对CopySQLiteInteropFiles目标的引用以确保它正在运行.
小智 5
使用System.Data.SQLite.CoreNuGet 包版本 1.0.104,我遇到了与 @Eternal21 和 @Patrick 相同的问题。也就是说,项目 A 引用 SQLite,项目 B 引用 A,其中SQlite.Interop.dll未复制到 B 的输出目录中。
我找到了一个解决方案,可以解决项目 A 而不是 B 中的问题,这是一个更强大的解决方案,因为它可以为所有引用 A 的未来项目修复一次问题.targets。NuGet 包的文件包含以下部分:
<ItemGroup Condition="'$(ContentSQLiteInteropFiles)' != '' And
'$(ContentSQLiteInteropFiles)' != 'false' And
'@(SQLiteInteropFiles)' != ''">
<Content Include="@(SQLiteInteropFiles)">
<Link>%(RecursiveDir)%(FileName)%(Extension)</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
此部分添加SQLite.Interop.dll为引用,必须将其复制到项目 A 的输出以及引用项目(如 B)的输出。但 MSBuild 属性ContentSQLiteInteropFiles默认情况下未定义(我不知道为什么),从而禁用第一个条件的引用。为了启用它,我将以下行添加到PropertyGroup项目 A.csproj文件的元素中:
<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
Run Code Online (Sandbox Code Playgroud)
请注意,此行必须位于NuGet 包文件的Import元素之前。.targets
| 归档时间: |
|
| 查看次数: |
10588 次 |
| 最近记录: |