我有一个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并不打算放在构建输出文件夹中,它可以找到它的所有依赖项。 我该如何解决这个问题?我应该在包中包含依赖项还是有另一种方法来解决它?
答案 0 :(得分:0)
MSBuild将从包含任务程序集的文件夹中解析任务依赖性。不幸的是,这意味着你需要在你的CustomBuildAction.dll文件旁边的NuGet包中包含Newtonsoft.Json.dll。
要防止程序集在构建输出中结束,请将程序集放入程序包中的其他文件夹中。例如,工具/只要它不在lib中,它就不会被视为可供引用的程序集。