为什么NuGetPack会回复“无法创建没有依赖项或内容的包”

13

我正在尝试使用以下Cake脚本:

Task("Create-NuGet-Packages")
    .IsDependentOn("Build")
    .WithCriteria(() =>DirectoryExists(parameters.Paths.Directories.NugetNuspecDirectory))
    .Does(() =>
{
    var nuspecFiles = GetFiles(parameters.Paths.Directories.NugetNuspecDirectory + "/**/*.nuspec");

    EnsureDirectoryExists(parameters.Paths.Directories.NuGetPackages);

    foreach(var nuspecFile in nuspecFiles)
    {
        // TODO: Addin the release notes
        // ReleaseNotes = parameters.ReleaseNotes.Notes.ToArray(),

        // Create packages.
        NuGetPack(nuspecFile, new NuGetPackSettings {
            Version = parameters.Version.SemVersion,
            BasePath = parameters.Paths.Directories.PublishedLibraries.Combine(nuspecFile.GetFilenameWithoutExtension().ToString()),
            OutputDirectory = parameters.Paths.Directories.NuGetPackages,
            Symbols = false,
            NoPackageAnalysis = true
        });
    }
});

但我一直收到相同的错误:

从NuGetPack返回的错误

我已确认生成的*.temp.nuspec文件确实包含正确的文件,并且文件存在于指定的位置,并且BasePath也是正确的。

注意:我已经使用了-Verbosity Diagnostic来生成实际传递给NuGet.exe的命令,直接运行该命令也会导致相同的错误消息。因此,我认为这不是Cake的问题,而是NuGet.exe的问题。


1
确保您正在使用最新的NuGet。可以运行“nuget update -self”来安装最新版本。 - Alex Sorokoletov
在我的情况下,我发现你提供的 GitHub 线程中有以下评论解释道:“不幸的是,应用程序编写的方式需要进行大量的重新工作,以确定某些内容是由于硬编码还是通配符而包含的。这在使用 dotnet.exe pack / msbuild /t:pack 时尤其困难,因为 msbuild 解析所有通配符并向 NuGet 传递完整的文件列表。” - John Zabroski
3个回答

6
原来,这是我使用的目录路径错误。我试图使用.build_temp_PublishedLibraries\Cake.Twitter
.build更改为BuildArtifacts立即使一切正常运作:

enter image description here

经过一番调查,这似乎是NuGet已知的问题(至少对一些人而言):

https://twitter.com/ferventcoder/status/505048107520765952

即以 . 开头的任何文件或文件夹都不被Nuget Pack识别。
似乎这个问题已经在Chocolatey中得到了纠正,因此它在那里可以工作。
注意:我已经在这里提出了这个问题:https://github.com/NuGet/Home/issues/3308

1
我在你提供的那个 GitHub 线程里发现了下面这条评论,非常详细解释了问题:不幸的是,应用程序的编写方式需要进行大量的重新工作,以确定某些内容是由于硬编码还是通配符导致的。特别是在使用 dotnet.exe pack / msbuild / t:pack 时更加困难,因为 msbuild 解析所有通配符并将一个完整的文件列表传递给 NuGet。 换句话说,问题在于 MSBuild 可能不知道你有一个带通配符的 .nuspec 文件。 - John Zabroski

4

但在那种情况下,我要如何在Linux上使用它? - Dura

3

如果您在<file src属性中简单地指定了错误的路径/规格,并且NuGet没有收集到任何文件,则也可以看到此错误。


2
例如,在 Windows 上,您的路径应该使用反斜杠而不是正斜杠。 - Taylor G

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接