我有一个同时具有nuspec和csproj文件的Dotnet Core 2.1项目-一个主要的麻烦是csproj描述了这样的依赖项:
<ItemGroup>
<PackageReference Include="Refit" Version="4.6.16" />
<PackageReference Include="Microsoft.AspNetCore.All" Version="2.1" />
<PackageReference Include="Refit.HttpClientFactory" Version="4.6.16" />
</ItemGroup>
当nuspec这样做时:
<dependencies>
<dependency id="Refit" version="4.6.16" />
<dependency id="Refit.HttpClientFactory" version="4.6.16" />
<dependency id="Microsoft.AspNetCore.All" version="2.1" />
</dependencies>
两者都很容易不同步,并且两次保留相同的信息很烦人。 有办法避免这种情况吗?
答案 0 :(得分:5)
肯定有一种简单的方法,只需使用dotnet pack
而不是nuget pack
和.csproj
文件而不是.nuspec
文件即可。
dotnet pack
支持两种指定nuget包属性的方法。
.nuspec
文件,这将禁用第二种方式.csproj
file dotnet pack
支持两种方式,但是您必须添加NuspecFile
属性以引用.nuspec
文件,并且传统方式存在很多错误和功能缺失,这意味着您可以只能使用新的。
dotnet pack
执行恢复并在项目上构建,并用自动生成的.nuspec文件打包,将.csproj
中的所有nuget元数据属性解析为.nuspec
属性,并将所有项目引用作为nuget包引用(对于手动指定的.nuspec
文件不可用),因此可以自动确保版本控制,依赖关系和程序包文件结构。
My own library可能是一个示例。版本和依赖项仅在应有的位置指定一次,并且不再有任何烦人的重复配置。在解决方案目录中执行dotnet pack
会在.nupkg
目录中生成所有好的dist
。