簡體   English   中英

無法使用 dotnet CLI 和 nuspec 文件打包 NuGet 包

[英]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-cliNuGet項目中閱讀了很多未解決的問題,這些問題似乎與我遇到的情況相似,但沒有一個給我提供了有效的解決方案。 有沒有其他人認為這是一個錯誤,或者我錯過了什么?

我遇到了同樣的問題,並按照此處的建議通過將<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM