MSBuild进程和NuGet包

时间:2016-09-20 15:42:00

标签: c# visual-studio msbuild

背景资料

我正在制作聊天机器人。我的解决方案目前包含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包的更新,您必须对包中的构建目标进行更改。

1 个答案:

答案 0 :(得分:0)

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

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

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