【问题标题】:tfs build - nuget package only projects with nuspectfs build - nuget 仅使用 nuspec 打包项目
【发布时间】:2017-06-14 14:44:31
【问题描述】:

我在 TFS 2015 中有一个构建定义

此构建定义由提交到主节点触发,应该构建项目、运行所有测试并发布 包含 .nuspec 文件的项目的 Nuget 包。

我的问题是我想打包包含 .nuspec 文件的项目,而不仅仅是任何项目。

我知道我可以在路径/模式中指定“**\*.nuspec”,但是我必须为每个 nuspec 显式指定 id、title、version、desc 等...并且我想要它取自程序集信息。

有办法获得吗?

阿里克。

【问题讨论】:

  • 你的意思是:“知道我可以在路径/模式中指定“***.nuspec”吗?
  • @JeroenHeier 你说得对,我修好了。谢谢。
  • 使用 csproj 文件有好处(例如自动查找包依赖项)。如果您不想创建自定义/自定义任务,使用项目名称执行某些操作可能更经济。
  • @JeroenHeier 那么我应该继续在 nuget 打包程序中使用 .csproj 文件吗?那我该如何解决我的问题呢?
  • 您可以更改您使用的模式和/或添加更多具有不同模式/项目文件的 NuGet 打包程序任务

标签: .net visual-studio build nuget


【解决方案1】:

.nuspec 在生成时不会获取程序集信息。我们需要手动修改id、title、version等。

所以我们只需要直接打包.csproj文件,它会获取生成包的组装信息。

【讨论】:

  • 但是如果我修改 .nuspec 文件,我将不得不继续维护每个版本,这不是我所希望的,我希望可以从程序集信息中获取包信息,所以我不必维护它两次。我可以将 nuspec 创建添加为构建定义的一部分,但是我无法决定我想要哪些项目作为 nuget 包,哪些不是,该解决方案的所有项目都将发布到 nuget
  • 这是当前版本的 NuGet 在为包项目生成 nuspec 文件时的默认操作。如果您无法决定将哪些项目生成为 nuget 包,为什么要为每个项目创建 .nuspec 文件?
【解决方案2】:

您可以创建一个命令行任务来手动完成:

for /f "delims=" %%a in ('dir /s/b *.nuspec') do nuget pack %%~dpa%%~na.csproj -IncludeReferencedProjects -Properties Configuration=Release

您还可以使用极简的 nuspec 文件(对于假定为 nugets 包的每个项目都相同)来利用来自 AssemblyInfo 的元数据:

<?xml version="1.0"?>
<package >
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Puresharp</authors>
    <owners>Puresharp</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>$id$.$version$</description>
    <releaseNotes></releaseNotes>
    <copyright>$copyright$</copyright>
    <tags>Puresharp</tags>
  </metadata>
</package>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 2019-09-16
    • 2016-03-17
    • 2013-01-25
    • 1970-01-01
    • 2015-12-27
    • 2021-05-11
    相关资源
    最近更新 更多