2017-04-25 165 views
0

我有一个nuget包,它取决于其他几个(例如Newtonsoft.Json)。 包不打算作为一个类库来使用它只是增加了自定义的MSBuild行动,使封装的结构看起来像这样:从nuget包引用nuget包

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

当我安装包CustomBuildAction.targets正确的的csproj referensed但是当我试图运行生成我得到一个错误:

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

我已将Newtonsoft.Json.dll纳入nuspec文件作为包依赖项,nuget将其显示为依赖项,但MSBuild无法解析它。对我来说,它看起来像问题是,我从.targets文件夹的包使用相对路径(相对于建立文件夹)参照CustomBuildAction.dll,即:

../lib/net45/CustomBuildAction.dll 

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

+0

如果项目仅由自定义MSBuild操作使用,该项目是否需要引用CustomBuildAction.dll?我只是将它放在.targets文件旁边的build目录中,然后从那里导入它。然后在构建目录中也有Newtonsoft.Json.dll。 –

+0

@Matt Ward不,不需要将它作为参考添加到项目中。将尝试将dll移入生成文件夹,有趣的想法 – Leo

回答

0

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

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