我有几个项目正在从.NET Framework 4.7迁移到.NET Standard 2.0。因此,我正在尝试使用
我做的第一件事是在项目文件中将
经过仔细阅读(不喜欢新版.NET Core文档的作者),我相信这是我需要运行的命令,以使用我的nuspec文件:
我已经阅读了GitHub上许多来自dotnet-cli和NuGet项目的公开问题,似乎与我所经历的类似,但没有一个给我有效的解决方案。是否有人认为这是一个错误或者我漏掉了什么?
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
结果出现以下错误:
根据输出,很明显底层目标文件没有从我的AssemblyInfo.cs中获取值,而是尝试直接从csproj文件中获取值。因此,我尝试简化该过程并运行了以下命令: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): error : 值不能为空或为空字符串。[F:\Git\MyProject\Model\MyProject.Model\MyProject.Model.csproj]
NuGet.Build.Tasks.Pack.targets(202,5): error : 参数名: value [F:\Git\MyProject\Model\MyProject.Model\MyProject.Model.csproj]
dotnet pack MyProject.Model\MyProject.Model.csproj
,它创建了我的NuGet包,但没有在我的nuspec或AssemblyInfo.cs文件中包含元数据。我已经阅读了GitHub上许多来自dotnet-cli和NuGet项目的公开问题,似乎与我所经历的类似,但没有一个给我有效的解决方案。是否有人认为这是一个错误或者我漏掉了什么?
nuget
CLI时,该过程一直正常工作。只有两个东西发生了变化; 目标框架是.NET Standard 2.0,并且我正在使用dotnet
CLI来打包项目。 - tj-cappelletti