在我的Azure DevOps构建管道中,我添加了一个 pack 命令类型(版本2. *)的NuGet任务。
我正在尝试传递-Exclude ***.tt
参数,以便在从其他项目引用时将这些文件排除在外。但是,在生成的NuGet程序包中,这些.tt文件显示在Content文件夹中。
写在主机日志中的命令是:
nuget.exe pack PROJECTNAME.csproj -NonInteractive -OutputDirectory SOME_OUTPUTPATH -Properties "Configuration=release;\"-Exclude ***.tt\"" -Verbosity Detailed
如您所见,exclude不是属性的一部分,而应作为单独的-Exclude
参数。
任何想法我该如何实现?非常感谢!
添加了屏幕截图和YAML:
steps:
- task: NuGetCommand@2
displayName: 'NuGet pack'
inputs:
command: pack
packagesToPack: ProjectName.csproj
buildProperties: '-Exclude ***.tt'
答案 0 :(得分:1)
在Azure DevOps构建管道中传递NuGet'Pack'参数
您不能以这种方式使用参数-Exclude
。那是因为此参数用于.nuspec
而不是.csproj
,所以-Exclude
不是项目文件中的Property,因此我们不能将其与.csproj
一起使用。
检查nuget文档nuget pack command (NuGet CLI)时,可以看到以下示例:
nuget pack Package.nuspec -exclude "*.exe" -exclude "*.bat"
如果要使用项目文件.tt
排除.csproj
个文件,则必须转到项目文件以排除此类文件,例如:
<ItemGroup>
<None Update="**.tt">
<Pack>False</Pack>
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Test.txt</LastGenOutput>
</None>
...
</ItemGroup>
如果您不想修改源文件,则可以创建.nuspec
文件,然后将.nuspec
文件打包为参数-Exclude
。
例如,我创建以下.nuspec
:
<?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>
如果我使用参数-Exclude "**\*.cs"
打包此.nuspec文件:
那么我们知道,.cs
被排除在包装中。
希望这会有所帮助。
答案 1 :(得分:1)
将-Exclude
与nuget pack .csproj
一起使用时,需要为完整路径提供排除的文件。但是这里还有另一个问题,Azure DevOps将-Exclude
附加到-Properties
上,并且忽略了这种遗漏,因此我们需要以另一种方式添加-Exclude
,如何?在NuGet custom
命令中:
- task: NuGetCommand@2
inputs:
command: custom
arguments: 'pack "$(Build.SourcesDirectory)\Path\To\.csproj" -Exclude "$(Build.SourcesDirectory)\Path\to\*.tt"'
在尝试使用常规-Exclude
的日志时,您可以看到nuget打包了我的.exe
文件:
这里是我执行自定义命令后的日志,没有.exe
:
我的任务是:
- task: NuGetCommand@2
inputs:
command: custom
arguments: 'pack "$(Build.SourcesDirectory)\TestVars\TestVars\TestVars.csproj" -Exclude "$(Build.SourcesDirectory)\TestVars\TestVars\bin\Debug\*.exe"'
答案 2 :(得分:0)
它在Visual Studio 2015中为我解决了
<ItemGroup>
<None Include="**.tt">
<Pack>False</Pack>
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Test.txt</LastGenOutput>
</None>
...
</ItemGroup>