【问题标题】:Referencing nuget packages from nuget package从 nuget 包中引用 nuget 包
【发布时间】:2017-04-25 14:06:42
【问题描述】:

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

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

当我安装包时,CustomBuildAction.targets 是从 csproj 正确引用的,但是当我尝试运行 build 时,我收到一个错误:

无法从程序集“dll/CustomBuildAction.dll 的路径”加载“CustomBuildAction”任务。无法加载文件或程序集“Newtonsoft.Json.dll,Version=...”或其依赖项之一。

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

../lib/net45/CustomBuildAction.dll

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

【问题讨论】:

  • 如果仅由自定义 MSBuild 操作使用,项目是否需要引用 CustomBuildAction.dll?我只需将它放在 .targets 文件旁边的构建目录中,然后从那里导入它。然后在构建目录中也有 Newtonsoft.Json.dll。
  • @Matt Ward 不,没有必要将它作为参考添加到项目中。将尝试将 dll 移动到构建文件夹中,有趣的想法

标签: c# dll msbuild nuget nuget-package


【解决方案1】:

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

为防止程序集出现在构建输出中,请将程序集放入包中的不同文件夹中。例如,tools/ 只要不在 lib 中,就不会被视为可供引用的程序集。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 2012-03-24
    相关资源
    最近更新 更多