MSBuild进程和NuGet包

本文关键字:NuGet 进程 MSBuild | 更新日期: 2023-09-27 18:07:50

背景信息

我正在做一个聊天机器人。我的解决方案目前包含4个项目。1个项目是控制台应用程序(也是我的启动项目),其他3个是类库项目。控制台应用程序的目的是非常轻(一个类与静态main方法启动机器人)。我试图在bot类库和一些支持库中包含所有的逻辑和依赖关系。

我的问题

我的bot目前由SQLite数据库支持。要访问这个数据库,我使用System.Data。SQLite,我添加到我的解决方案使用NuGet,当我去运行运行和测试我的机器人,我得到以下异常:
Unable to load DLL 'SQLite.Interop.dll': The specified module could not be found.
在互联网上搜索后,我了解到解决这个问题的方法是确保将SQLite.Interop.dll复制到控制台应用程序的输出目录中。许多人建议,最简单的方法就是使用NuGet将System.Data.SQLite作为依赖项添加到该项目(SQLite.Interop.dll目前使用NuGet包提供的目标文件复制到引用项目的输出文件夹中)。

在构建过程中,我如何才能将适当的dll复制到正确的位置?我想避免添加一个引用System.Data.SQLite NuGet包在控制台应用程序。我希望有一个可维护的解决方案,我想释放我的代码作为一个开源项目,我不希望这样一个谜像知道你必须手动复制各种dll或随时有更新的NuGet包你必须更改构建目标中发现包。

MSBuild进程和NuGet包

只创建一个输出目录,用于存储所有组件。您只有几个项目(假设所有项目都在同一层次结构级别上),因此您可以

  • 进入"Project properties> Build> Output path",设置为"..'..'bin'Debug'"(根据配置而定)。您也可以将其设置为..'..'bin'$(Configuration)'。这样配置的名称将被使用。
  • 也可以手工编辑*。csproj文件,以同样的方式修改<OutputPath>属性。
  • 你可以创建Common.props文件,它可以包含你的项目的共同属性:OutputPath, TargetFramework, Configuration properties,等等(但你必须在你所有的项目<Import Project="..'..'Common.props">)。

实际上你有更多的选择,这些更容易实现