![](/img/trans.png)
[英]dotnet pack creates package that is not compatible with .Net Core project when using nuspec file
[英]Unable to pack a NuGet package using dotnet CLI and nuspec file
我有幾個項目要從 .NET Framework 4.7 遷移到 .NET Standard 2.0。 因此,我嘗試使用dotnet pack
命令創建我的 NuGet 包,同時將我的nuspec
文件與令牌一起使用。 我有幾個為我生成版本號的自定義構建腳本。 我生成的文件不是版本控制的一部分,但nuspec
文件就是為什么我想嘗試找到一種讓令牌工作的方法,否則我會被困在編寫新腳本中。
我做的第一件事是在項目文件中將GenerateAssemblyInfo
設置為 false。 在我最簡單的項目中, csproj
文件如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
</Project>
然后,我將生成一個AssemblyInfo.cs
,作為構建過程的一部分。 在我編譯項目之前,該文件如下所示:
using System.Reflection;
using System.Runtime.InteropServices;
[assembly: AssemblyCompany("Company Name")]
[assembly: AssemblyCopyright("Copyright © 2019")]
#if DEBUG
[assembly: AssemblyConfiguration("Debug")]
#else
[assembly: AssemblyConfiguration("Release")]
#endif
[assembly: AssemblyTitle("The Title")]
[assembly: AssemblyDescription("The Description")]
[assembly: AssemblyProduct("The Product")]
[assembly: ComVisible(false)]
[assembly: Guid("48d6ef54-a8fb-4876-8a9a-2fb8e8cd27e7")]
[assembly: AssemblyVersion("6.0.0.0")]
[assembly: AssemblyFileVersion("6.0.0.0")]
然后我有一個.nuspec
文件,我用它來創建我的 NuGet 包,它看起來像這樣:
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>My name</owners>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>My Release Notes</releaseNotes>
<copyright>Copyright 2019</copyright>
<projectUrl>http://url.local</projectUrl>
</metadata>
</package>
經過大量閱讀(不是為 .NET Core 編寫新文檔的粉絲)我相信這是我需要運行的命令才能使用我的nuspec
文件: dotnet pack SubFolder\\MyProject.Model.csproj /p:NuspecFile=MyProject.Model.nuspec /p:NuspecBasePath=nuget
結果是這個錯誤:
NuGet.Build.Tasks.Pack.targets(202,5): error : 嘗試解析清單文件中屬性“version”的值“”時出錯。 [F:\\Git\\MyProject\\Model\\MyProject.Model\\MyProject.Model.csproj]
NuGet.Build.Tasks.Pack.targets(202,5): 錯誤:值不能為 null 或空字符串。 [F:\\Git\\MyProject\\Model\\MyProject.Model\\MyProject.Model.csproj]
NuGet.Build.Tasks.Pack.targets(202,5): 錯誤:參數名稱:值 [F:\\Git\\MyProject\\Model\\MyProject.Model\\MyProject.Model.csproj]
根據輸出,很明顯底層目標文件沒有從我的AssemblyInfo.cs
獲取值,而是試圖直接從csproj
文件中獲取值。 所以我試圖簡化這個過程並運行這個命令: dotnet pack MyProject.Model\\MyProject.Model.csproj
它創建了我的 NuGet 包,但在我的nuspec
或我的AssemblyInfo.cs
文件中沒有元數據。
我在 GitHub 上從dotnet-cli
和NuGet
項目中閱讀了很多未解決的問題,這些問題似乎與我遇到的情況相似,但沒有一個給我提供了有效的解決方案。 有沒有其他人認為這是一個錯誤,或者我錯過了什么?
我遇到了同樣的問題,並按照此處的建議通過將<NuspecProperties>
添加到 csproj 來解決它: https : //github.com/NuGet/Home/issues/6636
<NuspecFile>package.nuspec</NuspecFile>
<NuspecProperties>$(NuspecProperties);configuration=$(Configuration)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);version=$(Version)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);id=$(PackageId)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);author=$(Authors)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageProjectUrl=$(PackageProjectUrl)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);Description=$(Description)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageReleaseNotes=$(PackageReleaseNotes)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);Copyright=$(Copyright)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);PackageTags=$(PackageTags)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);RepositoryType=$(RepositoryType)</NuspecProperties>
<NuspecProperties>$(NuspecProperties);RepositoryUrl=$(RepositoryUrl)</NuspecProperties>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.