首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用dotnet和nuspec文件打包NuGet包

无法使用dotnet和nuspec文件打包NuGet包
EN

Stack Overflow用户
提问于 2019-02-07 15:25:12
回答 1查看 5.1K关注 0票数 7

我有几个从.NET Framework4.7迁移到.NET标准2.0的项目。因此,我尝试使用dotnet pack命令创建NuGet包,同时使用带有令牌的nuspec文件。我有几个自定义构建脚本,它们为我生成版本号。我生成的文件不是版本控制的一部分,但因此,我想尝试找到一种方法使令牌正常工作,否则我将不得不编写新的脚本。

我做的第一件事是在项目文件中将GenerateAssemblyInfo设置为false。在我最简单的项目中,csproj文件如下所示:

代码语言:javascript
复制
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
     <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
     <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

</Project>

然后,我将生成一个AssemblyInfo.cs,作为构建过程的一部分。在编译项目之前,该文件如下所示:

代码语言:javascript
复制
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包,如下所示:

代码语言:javascript
复制
<?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核心编写新文档),我相信这是我需要运行的命令,以便使用我的nuspec文件:dotnet pack SubFolder\MyProject.Model.csproj /p:NuspecFile=MyProject.Model.nuspec /p:NuspecBasePath=nuget

其结果是这个错误:

NuGet.Build.Tasks.Pack.targets(202,5):错误:在尝试解析清单文件中的“属性”版本的值时发生了错误。F:\Git\MyProject\Model\MyProject.Model\MyProject.Model.csproj NuGet.Build.Tasks.Pack.targets(202,5):error : Value不能是null或空字符串。F:\Git\MyProject\Model\MyProject.Model\MyProject.Model.csproj F:\Git\MyProject\Model\MyProject.Model\MyProject.Model.csproj (202,5):错误:参数名称:值NuGet.Build.Tasks.Pack.targets

根据输出,很明显底层目标文件不是从我的AssemblyInfo.cs中获取值,而是试图直接从csproj文件中获取值。因此,我试图简化这个过程,并运行了以下命令:dotnet pack MyProject.Model\MyProject.Model.csproj,它创建了我的NuGet包,但在我的nuspecAssemblyInfo.cs文件中没有元数据。

我从dotnet-cliNuGet项目中读到了许多关于dotnet-cliNuGet的未决问题,它们似乎与我所经历的相似,但它们都没有给我一个可行的解决方案。还有人认为这是个窃听器还是我漏掉了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-03 23:50:24

我也遇到了同样的问题,并通过在csproj中添加<NuspecProperties>来解决这个问题,如下所示:https://github.com/NuGet/Home/issues/6636

代码语言:javascript
复制
<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>
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54576651

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档