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包你必须更改构建目标中发现包。
只创建一个输出目录,用于存储所有组件。您只有几个项目(假设所有项目都在同一层次结构级别上),因此您可以
- 进入"
Project properties
>Build
>Output path
",设置为"..'..'bin'Debug'
"(根据配置而定)。您也可以将其设置为..'..'bin'$(Configuration)'
。这样配置的名称将被使用。 - 也可以手工编辑*。csproj文件,以同样的方式修改
<OutputPath>
属性。 - 你可以创建
Common.props
文件,它可以包含你的项目的共同属性:OutputPath
,TargetFramework
,Configuration properties
,等等(但你必须在你所有的项目<Import Project="..'..'Common.props">
)。
实际上你有更多的选择,这些更容易实现