【问题标题】:How to resolve Nuget Package Version and Path in Pre-Build Event of a Project?如何解决项目预构建事件中的 Nuget 包版本和路径?
【发布时间】:2018-03-07 20:24:42
【问题描述】:

我有一个 NuGet 包,其中包含我的项目中引用的内容文件。在新机器上获取最新版本时,构建失败,因为 NuGet 还原不复制内容文件。所以我想做的是:

In PreBuild
If my Content file doesn't exist,
    run this nuget Command: "Update-Package My.Nuget.Sources -reinstall"

由于 Nuget 文件的版本控制和访问 nuget,我正在努力确定路径差异。我如何实际生成下面的SourceOnlyNugetVersionNugetPath 变量?

if not exist "$(ProjectFolder)App_Packages\My.NuGet.Sources.$(SourceOnlyNugetVersion?)\somefile.cs" (
    "$(NugetPath)nuget.exe" Update-Package My.NuGet.Sources -reinstall        
) 

【问题讨论】:

    标签: visual-studio nuget visual-studio-2017


    【解决方案1】:

    如何在项目的 Pre-Build 事件中解析 Nuget 包版本和路径?

    如果你想在 Pre-build 事件中自动重新安装包,恐怕你目前无法实现。

    我们可以使用命令Update-Package -Id <package_name> –reinstall 在包管理器控制台中将包重新安装到您的项目中,但是不可能自动执行此操作。

    如果您想在构建事件中自动化它,您必须调用 NuGet CLI 而不是包管理器控制台。因为 NuGet CLI 不会修改项目文件或 packages.config;在这种方式下,它类似于还原,因为它只是将包添加到磁盘,但不会更改项目的依赖项。见NuGet CLI reference

    NuGet CLI上的安装包操作:

    反之,在包管理器上操作安装包:

    将包及其依赖项安装到项目中。

    因此我们无法使用 NuGet CLI 为项目重新安装 NuGet 包。

    此外,我们无法在 Visual Studio 之外使用包管理器控制台 powershell,因为包管理器控制台提供的是对 Visual Studio 对象的访问。

    https://github.com/NuGet/Home/issues/1512

    同样,我们无法在构建事件中使用包管理器控制台,构建事件由 MSBuild 运行,因此它需要在从命令行运行构建时工作。

    因此,自动重新安装 NuGet 包似乎是不可能的,或者替代方法是编写一个控制台应用程序,使用 NuGet.Core.dll 来执行与 PowerShell 脚本相同的操作。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-05
    • 2017-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-31
    • 2016-04-11
    相关资源
    最近更新 更多