繁体   English   中英

MSBuild程序和NuGet程序包

[英]MSBuild process and NuGet packages

背景资料

我正在做一个聊天机器人。 我的解决方案当前包含4个项目。 1个项目是控制台应用程序(也是我的启动项目),其他3个是类库项目。 控制台应用程序应非常轻巧(一类具有启动bot的静态main方法)。 我正在尝试将所有逻辑和依赖项包含在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添加为对该项目的依赖项(当前使用NuGet包提供的目标文件将SQLite.Interop.dll复制到该文件夹​​的输出文件夹中)。参考项目)。

问题

如何在构建过程中将正确的dll复制到正确的位置? 我想避免在控制台应用程序中添加对System.Data.SQLite NuGet包的引用。 我希望有一个可维护的解决方案,因为我正在考虑将我的代码作为一个开放源代码项目发布,并且我不希望这样的事情成为一个谜,例如知道您必须手动复制各种dll或在有任何更新时NuGet软件包,您必须进行更改以构建在软件包中找到的目标。

只需将所有组件存储在单个输出目录中即可。 您只有几个项目(假设所有项目都在相同的层次结构级别上),因此您可以

  • 转到Project properties > Build > Output path ,将其设置为..\\..\\bin\\Debug\\ (取决于配置)。 您也可以将其设置为..\\..\\bin\\$(Configuration)\\ 这样,将使用配置名称。
  • 另外,您可以手动编辑* .csproj文件,以相同的方式修改<OutputPath>属性。
  • 您可以创建Common.props文件,该文件可以包含项目的公共属性: OutputPathTargetFrameworkConfiguration properties等(但必须在所有目录中<Import Project="..\\..\\Common.props">您的项目)。

实际上,您有更多选择,这些选择更易于实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM