首页 > 解决方案 > 使用packages.config时如何递归调用nuget restore?

问题描述

我有一个非基于 .NET 的项目,我正试图将 nuget 用于管理依赖项。因此,我必须使用 packages.config 来定义项目的依赖关系。

现在,我已经完全按照我的意愿打包和推送了,但是当我恢复包时,它只恢复了我列出的 packages.config 中的依赖项,没有那个包的依赖项。因此,例如,如果我有一个应用程序 MyApp,它依赖于 Foo,然后依赖于 Bar,则在 MyApp 上调用 nuget restore 不会将 Bar 放入包文件夹中。

根据CLI 文档,-Recursive 标志不适用于使用 packages.config 的项目——这对我来说是个问题,因为我需要使用 packages.config,据我所知。或者至少,如果我能提供帮助,我真的不想再花 3 个小时将我的所有 12 个包转换为使用不同的格式。

作为参考,这里是我的文件的示例,目前:

MyApp 的 package.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
    <package id="Foo" version="1.0.0.0" allowedVersions="[1.0]" />
</packages>

Foo.nuspec

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->
        <id>Foo</id>
        <version>1.0</version>
        <description>Foo</description>
        <authors>Tesset</authors>
        <dependencies>
            <dependency id="Bar" version="[1.0]" />
        </dependencies>
    </metadata>
    <files>
        <file src=".\lib\Foo\**" target="lib\Foo" />
    </files>
</package>

酒吧.nuspec

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <!-- Required elements-->
        <id>Bar</id>
        <version>1.0</version>
        <description>Bar</description>
        <authors>Tesset</authors>
    </metadata>
    <files>
        <file src=".\lib\Bar\**" target="lib\Bar" />
    </files>
</package>

而且,为了完整起见,我将 nuget restore 称为:

nuget restore ".\MyApp\packages.config" -PackageSaveMode nuspec -OutputDirectory ".\MyApp\packages" -recursive

(是否有 -recursive 标志对于 Bar 是否最终出现在 packages 文件夹中没有区别)

那么,在 nuget 中是否有办法确保 Bar 在使用 packages.config 文件离开 MyApp(和 Foo)时得到恢复?如果没有,那么有没有办法恢复 nuspec 文件中列出的依赖项,所以我可以手动对nuget restore放入的文件进行递归.\MyApp\packages

标签: package-managersnuget-package-restore

解决方案


推荐阅读