Вот как я решил обе проблемы.
Первая проблема заключается в том, что собственные файлы e_sqlite3.dll не копируются в выходные данные проекта пакета.Проект Package имеет логику MSBuild в Microsoft.DesktopBridge.targets, которая вызывает цель GetCopyToOutputDirectoryItems для каждого из ссылочных проектов (например, проекта WPF).Поскольку файлы e_sqlite3.dll включаются в указанный проект посредством пакета NuGet, то, как они включаются, не приводит к тому, что они выбираются целью GetCopyToOutputDirectoryItems.Я решил эту проблему, добавив следующий код в мой проект WPF:
<Target Name="IncludeNativeBinariesAsOutput" BeforeTargets="GetCopyToOutputDirectoryItems">
<ItemGroup>
<Content Include="$(OutputPath)\x64\e_sqlite3.dll">
<Link>x64\e_sqlite3.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
<Content Include="$(OutputPath)\x86\e_sqlite3.dll">
<Link>x86\e_sqlite3.dll</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</Content>
</ItemGroup>
<AssignTargetPath Files="@(Content)" RootFolder="$(MSBuildProjectDirectory)">
<Output TaskParameter="AssignedFiles" ItemName="ContentWithTargetPath" />
</AssignTargetPath>
</Target>
Следующая проблема связана с ошибкой «невозможно открыть файл базы данных» после того, как необходимые собственные файлы находятся там, где они должны быть.,Я думаю, это потому, что он пытается создать проект в месте, которое не поддерживается проектом пакета Windows.Я справился с этим, установив специальное значение, которое SqliteConnection ищет для построения пути к файлу базы данных.Я просто добавил эту строку в свой класс конструктора приложения перед выполнением каких-либо операций с базой данных.
AppDomain.CurrentDomain.SetData("DataDirectory", ApplicationData.Current.LocalFolder.Path);