背景资料
我正在制作聊天机器人。我的解决方案目前包含4个项目1项目是一个控制台应用程序(和我的启动项目),另外3个是类库项目。控制台应用程序非常轻(一个类具有启动机器人的静态主方法)。我试图包含bot类库和一些支持库中的所有逻辑和依赖。
我的问题
我的机器人目前由SQLite数据库支持。要访问此数据库,我使用System.Data.SQLite,我使用NuGet添加到我的解决方案中,当我去运行并测试我的机器人时,我得到以下异常:
Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found.
搜索完Internet后,我了解到此问题的解决方案是确保将SQLite.Interop.dll
复制到控制台应用程序的输出目录中。许多人建议最简单的方法是使用NuGet添加System.Data.SQLite作为项目的依赖项(SQLite.Interop.dll
当前使用NuGet包提供的目标文件复制到输出文件夹引用项目)。
问题
如何在构建过程中将正确的dll复制到正确的位置?我想避免在控制台应用程序中添加对System.Data.SQLite NuGet包的引用。我希望有一个可维护的解决方案,因为我正在考虑将我的代码作为一个开源项目发布,我不希望这样的事情成为一个谜,比如知道你必须手动复制各种dll或者只要有对NuGet包的更新,您必须对包中的构建目标进行更改。
答案 0 :(得分:0)
只需创建存储所有组件的单个输出目录即可。您只有几个项目(假设所有项目位于同一层次结构级别),因此您可以
Project properties
> Build
> Output path
,将其设置为..\..\bin\Debug\
(具体取决于配置)。您也可以将其设置为..\..\bin\$(Configuration)\
。这样就可以使用配置名称。 <OutputPath>
属性。Common.props
文件:OutputPath
,TargetFramework
,Configuration properties
等等(但您必须{{3}在你的所有项目中)。实际上你有更多选择,这些选项更容易实现。