捆绑在 teamcity 中的 Nuget 包不安装文档文件
Nuget packages bundled in teamcity not installing documentation files
所以基本上我是通过运行 "pack" 目标的 .proj 文件在 TeamCity 中构建 nuget 包:
<MSBuild
Projects="$(MSBuildProjectDirectory)\PROJNAME.csproj"
Targets="Rebuild;pack"
Properties="Configuration=$(Configuration);Version=$(BUILD_NUMBER)" />
工件输出为:
PROJNAME\bin\Release\PROJNAME.%build.number%.nupkg
这对于 nuget 包的基本使用非常有效,但是我无法使文档 xml 文件正常工作。
我查看了输出 nupkg,发现文档 xml 实际上已捆绑并包含在包中,但问题是当我最终在我的消费项目中恢复 nuget 包时,dll按预期被复制,但文档没有。
我想知道这是否是因为 TC 生成的 .nuspec 文件,如果我可能需要放弃 teamcities nuspec 并创建我自己的,但是我希望避免这种情况,因为它按原样运行得很好,并处理版本控制等
有没有一种简单的方法可以在恢复包时包含文档 xml?
最后我发现它归结为 3 件事,即:
确保项目配置设置为生成文档。
要么手动添加代码如:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"><DocumentationFile>bin$(Configuration)\netstandard2.0\Project.documentation.xml</DocumentationFile>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <DocumentationFile>bin$(Configuration)\netstandard2.0\Project.documentation.xml</DocumentationFile>
</PropertyGroup>
或者通过 Visual Studio 项目属性菜单,如果您通过 VS 执行此操作,还请确保对所有配置执行此操作(如下图中的 A 所示):
将 EnableDocumentationFile 添加到您的 .csproj 文件中,例如:
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<RootNamespace>project</RootNamespace>
<Configurations>Debug;Release</Configurations>
<EnableDocumentationFile>true</EnableDocumentationFile>
</PropertyGroup>
最重要的是让您的项目知道(再次在您的 .csproj 中)它应该复制文档文件,如果您希望它出现在与您的包相同的级别,请使用 PackageFlatten dll:
<ItemGroup>
<None Remove="bin$(Configuration)\netstandard2.0\Project.documentation.xml" />
</ItemGroup>
<ItemGroup>
<Content Include="bin$(Configuration)\netstandard2.0\Project.documentation.xml">
<Pack>true</Pack>
<PackageCopyToOutput>true</PackageCopyToOutput>
<PackageFlatten>true</PackageFlatten>
</Content>
</ItemGroup>
所以基本上我是通过运行 "pack" 目标的 .proj 文件在 TeamCity 中构建 nuget 包:
<MSBuild
Projects="$(MSBuildProjectDirectory)\PROJNAME.csproj"
Targets="Rebuild;pack"
Properties="Configuration=$(Configuration);Version=$(BUILD_NUMBER)" />
工件输出为:
PROJNAME\bin\Release\PROJNAME.%build.number%.nupkg
这对于 nuget 包的基本使用非常有效,但是我无法使文档 xml 文件正常工作。
我查看了输出 nupkg,发现文档 xml 实际上已捆绑并包含在包中,但问题是当我最终在我的消费项目中恢复 nuget 包时,dll按预期被复制,但文档没有。
我想知道这是否是因为 TC 生成的 .nuspec 文件,如果我可能需要放弃 teamcities nuspec 并创建我自己的,但是我希望避免这种情况,因为它按原样运行得很好,并处理版本控制等
有没有一种简单的方法可以在恢复包时包含文档 xml?
最后我发现它归结为 3 件事,即:
确保项目配置设置为生成文档。
要么手动添加代码如:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'"><DocumentationFile>bin$(Configuration)\netstandard2.0\Project.documentation.xml</DocumentationFile> </PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'"> <DocumentationFile>bin$(Configuration)\netstandard2.0\Project.documentation.xml</DocumentationFile> </PropertyGroup>
或者通过 Visual Studio 项目属性菜单,如果您通过 VS 执行此操作,还请确保对所有配置执行此操作(如下图中的 A 所示):
将 EnableDocumentationFile 添加到您的 .csproj 文件中,例如:
<PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> <RootNamespace>project</RootNamespace> <Configurations>Debug;Release</Configurations> <EnableDocumentationFile>true</EnableDocumentationFile> </PropertyGroup>
最重要的是让您的项目知道(再次在您的 .csproj 中)它应该复制文档文件,如果您希望它出现在与您的包相同的级别,请使用 PackageFlatten dll:
<ItemGroup> <None Remove="bin$(Configuration)\netstandard2.0\Project.documentation.xml" /> </ItemGroup> <ItemGroup> <Content Include="bin$(Configuration)\netstandard2.0\Project.documentation.xml"> <Pack>true</Pack> <PackageCopyToOutput>true</PackageCopyToOutput> <PackageFlatten>true</PackageFlatten> </Content> </ItemGroup>