2
votes

Passer des arguments NuGet 'Pack' dans Azure DevOps Build Pipeline

Dans mon pipeline Azure DevOps Build, j'ai ajouté une tâche NuGet de type de commande pack (version 2. *).

J'essaie de passer le -Exclude ** * .tt afin d'exclure ces fichiers lorsqu'ils sont référencés à partir d'un autre projet. Cependant, dans le package NuGet généré, ces fichiers .tt apparaissent dans le dossier Content.

La commande écrite dans le journal de l'hôte est:

steps:
- task: NuGetCommand@2
  displayName: 'NuGet pack'
  inputs:
    command: pack
    packagesToPack: ProjectName.csproj
    buildProperties: '-Exclude ***.tt'

Comme vous le voyez, exclure ne fait pas partie des propriétés mais devrait être un argument -Exclude séparé.

Une idée de comment puis-je y parvenir? Merci beaucoup!

Ajout d'une capture d'écran et YAML:

entrez la description de l'image ici

nuget.exe pack PROJECTNAME.csproj -NonInteractive -OutputDirectory SOME_OUTPUTPATH -Properties "Configuration=release;\"-Exclude ***.tt\"" -Verbosity Detailed

p >


2 commentaires

Pouvez-vous partager votre tâche pépite? (yaml ou capture d'écran)


A modifié le message d'origine


3 Réponses :


1
votes

Transmission des arguments NuGet 'Pack' dans Azure DevOps Build Pipeline

Vous ne pouvez pas utiliser l'argument -Exclude de cette manière. Parce que cet argument est utilisé pour .nuspec et non pour .csproj , -Exclude n'est pas la propriété dans le fichier projet, nous ne pouvons donc pas utiliser avec .csproj.

Lorsque vous vérifiez le document nuget commande nuget pack (NuGet CLI) , vous pouvez voir l'exemple suivant:

<?xml version="1.0" encoding="utf-8"?>
<package xmlns="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
  <metadata>
    <id>MyTestCore</id>
    <version>6.0.0</version>
    <authors>TestContentFile</authors>
    <owners>TestContentFile</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Package Description</description>
    <contentFiles>
      <files include="any/any/Data.xml" buildAction="content" flatten="true" copyToOutput="true"/>
      <files include="any/any/Test.cs" buildAction="content" flatten="true" copyToOutput="true"/>
    </contentFiles>
  </metadata>

  <files>
    <file src="contentFiles/any/any/Data.xml" target="contentFiles/any/any/Data.xml" />
    <file src="contentFiles/any/any/Test.cs" target="contentFiles/any/any/Test.cs" />
  </files>
</package>

Si vous voulez exclure les fichiers .tt avec le fichier projet .csproj , vous devez aller dans votre fichier projet pour exclure ce type de fichier, comme:

  <ItemGroup>
    <None Update="**.tt">
      <Pack>False</Pack>
      <Generator>TextTemplatingFileGenerator</Generator>
      <LastGenOutput>Test.txt</LastGenOutput>
    </None>
    ...
  </ItemGroup>

Si vous ne souhaitez pas modifier le fichier source, vous pouvez créer le fichier .nuspec , puis emballer le fichier .nuspec avec l'argument -Exclure .

Par exemple, je crée le .nuspec suivant :

nuget pack Package.nuspec -exclude "*.exe" -exclude "*.bat"

Si j'emballe ce fichier .nuspec avec l'argument -Exclure "** \ *. Cs" :

entrez la description de l'image ici

Ensuite, nous pourrions connaître, le .cs est exclu du package.

J'espère que cela vous aidera.


1 commentaires

Merci beaucoup! Je suis allé à mon projet C # et j'ai changé l'action de construction des fichiers Context.tt (liés à .edmx) sur Aucun. De cette façon, tous ces fichiers n'étaient pas inclus après l'emballage.



3
votes

Lorsque vous utilisez -Exclude avec nuget pack .csproj , vous devez indiquer le chemin complet du fichier exclu. mais il y a un autre problème ici, Azure DevOps ajoute le -Exclude au -Properties et il ignore les explications, nous devons donc ajouter le -Exclude code> d'une autre manière, comment? dans la commande NuGet custom :

- task: NuGetCommand@2
  inputs:
    command: custom
    arguments: 'pack "$(Build.SourcesDirectory)\TestVars\TestVars\TestVars.csproj" -Exclude "$(Build.SourcesDirectory)\TestVars\TestVars\bin\Debug\*.exe"'

Voici un journal du -Exclude normal comme vous l'avez essayé, vous pouvez voir que le nuget pack my Fichier .exe :

entrez la description de l'image ici

Et voici un journal après avoir fait la commande personnalisée, il y a non .exe:

entrez la description de l'image ici

Ma tâche est:

- task: NuGetCommand@2
  inputs:
    command: custom
    arguments: 'pack "$(Build.SourcesDirectory)\Path\To\.csproj" -Exclude "$(Build.SourcesDirectory)\Path\to\*.tt"'


1 commentaires

Je vous remercie! C'est une excellente approche. Prendra en considération le champ personnalisé lors de l'emballage.



0
votes

Cela a été résolu pour moi dans Visual Studio 2015:

<ItemGroup>
    <None Include="**.tt">
        <Pack>False</Pack>
        <Generator>TextTemplatingFileGenerator</Generator>
        <LastGenOutput>Test.txt</LastGenOutput>
    </None>
    ...
</ItemGroup>


0 commentaires