2016-09-20 12 views
0

背景信息MSBuild的工艺和封装的NuGet

我想提出一个聊天机器人。我的解决方案目前包含4个项目1个项目是一个控制台应用程序(和我的启动项目),另外3个是类库项目。控制台应用程序旨在非常轻量级(一个具有启动机器人的静态主要方法的类)。我试图包含bot类库和一些支持库中的所有逻辑和依赖关系。

我的问题

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

问题

我该如何去获得正确的DLL的生成过程中复制到正确的位置?我想避免在控制台应用程序中添加对System.Data.SQLite NuGet包的引用。我希望有一个可维护的解决方案,因为我正在考虑将我的代码作为一个开源项目发布,我不希望像这样的东西成为一个谜,就像知道您必须手动复制各种dll或任何时候有更新NuGet包必须进行更改才能生成包中的目标。

回答

0

只需制作单个输出目录即可存储所有组件。你只有几个项目(假设在同一等级的所有项目),这样你就可以

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

其实你有更多的选择,这些更容易实现。