2011-02-23 60 views
10

我有我的本地nuget库存储库,分别用于我的个人和工作关联类库。在生成后事件中更新本地nuget包

我已经为不再处于开发阶段的库创建了一些nuget包。我只为他们做了这些,因为我不知道如何在项目建立后自动更新它们。

我已经想通过使用Visual Studio命令提示符的nuget命令行完成所有工作。所以,我可以很容易做到我所需要的工作(当然我会完全知道的命令,我不!)

基本上我想下面的任务在我的项目的生成后事件执行。

在项目构建:

  1. 复制项目的dll到一个特定的文件夹(NuGet包的lib文件夹)
  2. 更新为新的文件版本nuspec文件(我的项目是在每次构建增加文件版本)
  3. 创建新的文件版本

菲尔哈克新nupkg文件显示了一些这方面的功能,但它仍然是一个原型,据我可以告诉。

所以我的要求是上述。有没有其他人完成了这个?

回答

6

杰里米斯金纳写了a blog post关于他如何执行包的自动构建并将其上传到NuGet Gallery。我认为它符合你的要求。

基本上他使用MsBuild将版本(与MsBuild Community Extensions UpdateXml任务)应用到nuspec文件并调用nuget.exe进行打包。

9

所选择的解决方案看起来像它会工作,但它好像有你的要求,简单的解决方案。

您可以创建一个nuspec文件,该文件将读取项目元数据中的数据。你只需要使用此命令来完成这一次,

C:\<Path to project>\nuget spec 

这将在会由项目的元数据,当您创建NuGet包被替换的规格文件“令牌”。这包括文件版本。你会想要替换,因为所有项目在技术上都假设有它们。

更多细节可以在这里找到:http://docs.nuget.org/docs/creating-packages/Creating-and-Publishing-a-Package#From_a_project

则...

对于.NET框架(老派)项目,在你项目的建设后,你可以做这样的活动:

nuget pack "$(ProjectPath)" 
xcopy "$(TargetDir)*.nupkg" "<path where you are hosting your local nuget repo>" /C /Y 

(假设nuget.exe可用您的系统PATH)。

对于.Net核心和标准项目,nuget无法打包它们(请参阅https://github.com/NuGet/Home/issues/4491)。相反,用它作为您的生成后步骤:

dotnet pack "$(ProjectPath)" --no-build --include-source --include-symbols --output "<path where you are hosting your local nuget repo>"

当然,你可以调整的选项,以满足您的需求。有关dotnet pack命令选项,请参见https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-pack?tabs=netcore2x

+6

如果你想设置输出目录,你也可以避免两步过程。另外,您可能需要考虑是否需要包含依赖关系: nuget pack“$(ProjectPath)”-outputdirectory“c:\ NuGetPackages”-IncludeReferencedProjects – 2014-07-03 16:02:21

+0

这对于不会暴露远程NuGet Feed打包路径作为共享。 – 2015-11-09 20:43:17

0

我最近发布了一个解决方案,在构建期间实际创建/更新nuspec文件,因此不必手动执行,然后创建nupkg文件。

您只需添加一个生成后事件即可将软件包复制到目标位置(或将其作为可选阶段添加到我的解决方案中)。

您可以在walk-through guide heresource code + binary here之间找到一篇文章。