.NET SDK样式项目打包时如何将引用项目打进同一个包
通常情况下,我们会将每个项目都生成一个包。但有时也可能一些特殊情况会将项目及其引用项目的相关文件都打进一个包。
在之前的.nuspec文件中,我们可以在<files>节点中声明。SDK样式的项目中要怎么做呢?
变通
在NuGet Github Issue中有一条评论是这样的,他给出一个workaround.
<Project>
<PropertyGroup>
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="BuildOnlySettings;ResolveReferences">
<ItemGroup>
<!-- Filter out unnecessary files -->
<_ReferenceCopyLocalPaths Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'All'))"/>
</ItemGroup>
<!-- Print batches for debug purposes -->
<Message Text="Batch for .nupkg: ReferenceCopyLocalPaths = @(_ReferenceCopyLocalPaths), ReferenceCopyLocalPaths.DestinationSubDirectory = %(_ReferenceCopyLocalPaths.DestinationSubDirectory) Filename = %(_ReferenceCopyLocalPaths.Filename) Extension = %(_ReferenceCopyLocalPaths.Extension)" Importance="High" Condition="'@(_ReferenceCopyLocalPaths)' != ''" />
<ItemGroup>
<!-- Add file to package with consideration of sub folder. If empty, the root folder is chosen. -->
<BuildOutputInPackage Include="@(_ReferenceCopyLocalPaths)" TargetPath="%(_ReferenceCopyLocalPaths.DestinationSubDirectory)"/>
</ItemGroup>
</Target>
</Project>
细看一下,它还打印了debug信息,如果想去掉可以简化为
<Target Name="CopyProjectReferencesToPackage" DependsOnTargets="ResolveReferences">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference')->WithMetadataValue('PrivateAssets', 'All'))" />
</ItemGroup>
</Target>
它要求将引用项目设置为PrivateAssets="all"
或者直接通过VS的右键菜单设置属性,结果像下面这样
<ProjectReference Include="..\Core\Core.csproj">
<PrivateAssets>All</PrivateAssets>
</ProjectReference>
局限
假设有一组项目依赖关系如下:
LibraryA -----> Core ----> CoreOfCore
为了实现上述效果,我们需要在LibraryA项目中将Core/CoreOfCore都引用进来。如果依赖项更多,则项目的依赖关系将变得不清晰。
所以该方案的局限就是不太能支持级联。
回归
这样下来,还是.nuspec好用,可以灵活定义依赖项和文件。
因此,在我最新版的NuPack 17.1中,恢复了对.nuspec的支持,并增加了其在SDK style项目中的选项。
下一篇详细介绍相关的情况。
作者:CnSharp工作室
出处:
http://www.cnblogs.com/cnsharp/
本文版权归CnSharp.com所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
相关文章
- VPS主机搭建Ghost环境:Nginx Node.js MariaDB
- 吃透 Spring Boot 拦截器!这 6 大核心场景你都用过吗?
- kubernetes基础知识之secret环境变量
- Gateway网关在url参数带有特殊字符的情况下转发失败(响应400)
- 文件找不到?用find/locate,效率提升10倍!
- 一文掌握 Linux 符号链接(linux符号链接文件怎么创建)
- 基于Prometheus的自动化巡检(prometheus故障自愈)
- (在线编辑DWG)网页CAD二开实现焊接符号绘制
- .NET SDK样式项目打包时如何将引用项目打进同一个包
- Python文本处理进阶:unicodedata模块完全解析