【问题标题】:TFS build output path - cannot be found by OctoPack to create Nuget packageTFS 构建输出路径 - OctoPack 无法找到创建 Nuget 包
【发布时间】:2015-02-12 10:14:23
【问题描述】:

我有一个相当简单的类库,它的输出是一个程序集。 在 TFS 上有一个构建设置。

我正在使用 Octopack 将其打包为 nuget 包。

在我的 NuSpec 文件中,我指定了我的 <files> 部分,如下所示:

这是为了让 OctoPack 能够将程序集放在 lib 文件夹中(否则它只是将它放在包的根目录中,因此无法从其他项目中引用)

TFS 构建失败。日志的相关部分如下:

   CopyFilesToOutputDirectory:
     Copying file from "obj\Debug\Company.NameOfAssembly.dll" to "C:\Builds\4\dotNet\Company.NameOfAssembly\bin\Company.NameOfAssembly.dll".
     Company.NameOfAssembly -> C:\Builds\4\dotNet\Company.NameOfAssembly\bin\Company.NameOfAssembly.dll
     Copying file from "obj\Debug\Company.NameOfAssembly.pdb" to "C:\Builds\4\dotNet\Company.NameOfAssembly\bin\Company.NameOfAssembly.pdb".
   OctoPack:
     OctoPack: Get version info from assembly: C:\Builds\4\dotNet\Company.NameOfAssembly\bin\Company.NameOfAssembly.dll
     Using package version: 1.0.5521.18156
     OctoPack: Written files: 2
     OctoPack: Copy file: C:\Builds\4\dotNet\Company.NameOfAssembly\src\Company.NameOfAssembly\Company.NameOfAssembly.nuspec
     OctoPack: Files will not be added because the NuSpec file already contains a <files /> section with one or more elements and option OctoPackEnforceAddingFiles was not specified.
     OctoPack: Attempting to build package from 'Company.NameOfAssembly.nuspec'.
 1>MSBUILD : OctoPack error OCTONUGET: Cannot create a package that has no dependencies nor content. [C:\Builds\4\dotNet\Company.NameOfAssembly\src\Company.NameOfAssembly\Company.NameOfAssembly.csproj]

这基本上是因为它在我的 NuSpec 中指定的“bin”文件夹中找不到文件 - 有没有办法在我的文件 src 中指定 'C:\Builds\4\dotNet\Company.NameOfAssembly\bin'?

【问题讨论】:

  • 如果您使用的是最新版本的 TFS,您可以尝试将模板构建部分中的输出位置设置为 AsConfigured。这将禁用在 MSbuild 命令行上覆盖 OutDir 的模板的行为,以便它像在 VS 或普通命令行中那样构建。然后,您可以添加一个构建后脚本,将您想要的内容从它们在 TB_BUILD_SOURCESDIRECTORY 下的位置复制到 TF_BUILD_BINARIESDIRECTORY 以便它们被删除。
  • @Alex 我也有同样的问题。如果您找到了解决方案,可以分享一下吗?
  • @Baga 这是 9 个月前,我不再从事这个项目,我不记得它被修复了。不过,下面最有可能的答案是
  • @Alex Ok 会试试的,谢谢!

标签: tfs nuget nuget-package octopus-deploy


【解决方案1】:

问题似乎是您的一个文件夹中的点,这是 NuGet 问题,而不是 OctoPack 问题。 workaround suggested here - 使用 NuGet 的 -NoDefaultExcludes 开关对我有用(我最近遇到了同样的问题)。

使用 OctoPack,您可以使用 OctoPackNuGetArguments 参数指定它,请参阅 here, where -NoDefaultExcludes is even used as an example !

【讨论】:

  • OctoPack 的大多数问题实际上都是伪装的 NuGet 问题。
  • Google Chrome 正在警告我您发布的那个 codeplex 链接。说页面上有恶意代码
【解决方案2】:

您需要删除该部分并让 OctoPack 完成工作。

附:永远不要使用“obj”文件夹中的文件...

【讨论】:

  • 不幸的是,这行不通 - 通过“让 octopack 完成工作”,它不会将输出的程序集放在 nuget 包的 lib 文件夹中
  • 那是因为 OctoPack 用于部署应用程序,而不是用于组件。您应该使用 OOB NuGet 来打包。
【解决方案3】:

我认为mthierba 是对的;尝试利用 OctoPack 提供的一些参数。我的大多数(如果不是全部)OctoPack 问题实际上都是 NuGet 问题。

我还要补充一点,尝试在本地进行构建并根据需要自定义 NuSpec 可能更容易,而不是在 TFS 上进行不断构建并等待最终结果的麻烦。本地 NuSpec 自定义是一种有效的节省时间。

【讨论】:

    猜你喜欢
    • 2017-01-27
    • 2021-07-04
    • 2020-10-05
    • 1970-01-01
    • 2014-09-03
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多