从nuget包引用nuget包

时间:2017-04-25 14:06:43

标签: c# dll msbuild nuget nuget-package

我有一个nuget包,它取决于其他几个(例如Newtonsoft.Json)。 包不打算用作类库,它只添加自定义MSBuild操作,因此包的结构如下所示:

-package CustomBuildAction
|-lib/net45/CustomBuildAction.dll
|-build/CustomBuildAction.targets

当我安装软件包CustomBuildAction.targets从csproj正确引用时,但是当我尝试运行构建时,我收到错误:

无法从程序集“path to dll / CustomBuildAction.dll”加载“CustomBuildAction”任务。无法加载文件或程序集“Newtonsoft.Json.dll,Version = ...”或其中一个依赖项。

我已将Newtonsoft.Json.dll作为包依赖项包含在nuspec文件中,nuget将其显示为依赖项,但MSBuild无法解析它。对我来说,问题是我在使用包文件夹中的相对路径(相对于构建文件夹)从.targets文件引用CustomBuildAction.dll,即:

../lib/net45/CustomBuildAction.dll

但是这个dll并不打算放在构建输出文件夹中,它可以找到它的所有依赖项。 我该如何解决这个问题?我应该在包中包含依赖项还是有另一种方法来解决它?

1 个答案:

答案 0 :(得分:0)

MSBuild将从包含任务程序集的文件夹中解析任务依赖性。不幸的是,这意味着你需要在你的CustomBuildAction.dll文件旁边的NuGet包中包含Newtonsoft.Json.dll。

要防止程序集在构建输出中结束,请将程序集放入程序包中的其他文件夹中。例如,工具/只要它不在lib中,它就不会被视为可供引用的程序集。