gpt4 book ai didi

c# - 在 Visual Studio 2017 : Properties not updated correctly 中从 .csproj 文件创建 .nupkg

转载 作者:行者123 更新时间:2023-11-30 16:42:16 24 4
gpt4 key购买 nike

我使用 Visual Studio 2017,MSBuild 版本 15.4.8.50001。

我想通过直接从我的 .csproj 文件中读取来创建一个 .nupkg 文件。按照说明 here ,我将 .csproj 文件中的 first PropertyGroup 更新为:

  <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{24BAFE05-8B92-4EAA-8790-03C0768ACC57}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>D</RootNamespace>
<AssemblyName>D</AssemblyName>
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<PackageId>MyCompany.Nuget.D</PackageId>
<PackageVersion>1.0</PackageVersion>
<Author>Me</Author>
<Title>Nuget Experiment Project D</Title>
<Description>Top-level class in the diamond dependency structure</Description>
</PropertyGroup>

我打开命令提示符,导航到包含我的 .csproj 文件的文件夹,然后运行命令 nuget spec,如记录 here .

但是,生成的 .nuspec 文件如下所示:

<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
<projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
<iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>$description$</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Tag1 Tag2</tags>
</metadata>
</package>

如您所见,我在 .csproj 文件中定义的所有属性都没有正确填充到我的 .nuspec 文件中。

我做错了什么?

编辑: 我最初接受了 this answer , 但现在我认为这是不正确的。

我将 .csproj 文件中的 PackageVersion 属性更改为 2.0:

<PackageVersion>2.0</PackageVersion>

如果如答案所述,.nuspec 中的属性确实在打包过程中通过读取我的 .csproj 文件进行了更新,则新的 .nupkg 文件的名称应为 MyCompany.Nuget.D.2.0.0.nupkg

但是,新的 .nupkg 文件仍然命名为 D.1.0.0.nupkg:

enter image description here

编辑: 我按照 Leo-MSFT's answer 中的说明进行操作,并将 AssemblyInfo.cs 文件更改为以下内容:

[assembly: AssemblyTitle("NewD")]
[assembly: AssemblyDescription("Some dummy description")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("MyCompany.Me")]
[assembly: AssemblyProduct("NewD")]
[assembly: AssemblyCopyright("Copyright MyCompany 2017")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: AssemblyVersion("3.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

根据 this page$id$ 是从我的 .csproj 文件中的 AssemblyName 字段中检索的,$version$$author$$description$$copyright$AssemblyInfo.cs 中检索。为此,我还将 .csproj 文件中的 AssemblyName 字段更新为 MyCompany.NugetTest.D

我导航到包含我的 .sln 文件的文件夹,并按照答案中的建议运行 nuget spec "D\D.csproj"。生成的nuspec`` 文件如下所示:

<?xml version="1.0"?>
<package >
<metadata>
<id>D\D.csproj</id>
<version>1.0.0</version>
<authors>Me</authors>
<owners>Me</owners>
<licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
<projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
<iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package description</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Tag1 Tag2</tags>
<dependencies>
<dependency id="SampleDependency" version="1.0" />
</dependencies>
</metadata>
</package>

我将 id 更改为 SuperUniqueD,然后运行 ​​nuget pack D.csproj。然后创建了包 D.3.0.0.nupkg

为什么包仍然命名为D?如果从 .csproj 文件中的 AssemblyName 字段读取值,它不应该被命名为 MyCompany.NugetTest.D (根据文档), 或者 NewD 如果它是从 AssemblyInfo.cs 读取的?

最佳答案

none of the properties I defined in my .csproj file are correctly populated in my .nuspec file. What am I doing wrong?

那是因为您导航到了包含您的 .csproj 的文件夹文件,您应该导航到包含您的 .sln 文件的文件夹,或者在没有导航的命令中包含完整路径,命令如下:

  1. 导航到解决方案文件夹:

    C:\Workspaces\NuGet Experimentation\D>nuget spec "D\D.csproj"

  2. 没有导航:

    C:\Users\Admin>nuget spec "C:\Workspaces\NuGet Experimentation\D\D\D.csproj"

形式为 $<token>$ 的标记在打包过程中被替换为项目的 Properties/AssemblyInfo.cs 中的值文件。此文件的设置信息包含在 .sln 中文件。如果导航到包含 .csproj 文件的文件夹,NuGet 找不到 AssemblyInfo.cs 的位置, 所以 NuGet 将使用默认值 $<token>$而不是 AssemblyInfo.cs 中的值文件。使用上述方法,您将获得 .nuspec文件如:

<?xml version="1.0"?>
<package >
<metadata>
<id>C:\Workspaces\NuGet Experimentation\D\D\D.csproj</id>
<version>1.0.0</version>
<authors>Admin</authors>
<owners>Admin</owners>
<licenseUrl>http://LICENSE_URL_HERE_OR_DELETE_THIS_LINE</licenseUrl>
<projectUrl>http://PROJECT_URL_HERE_OR_DELETE_THIS_LINE</projectUrl>
<iconUrl>http://ICON_URL_HERE_OR_DELETE_THIS_LINE</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>Package description</description>
<releaseNotes>Summary of changes made in this release of the package.</releaseNotes>
<copyright>Copyright 2017</copyright>
<tags>Tag1 Tag2</tags>
<dependencies>
<dependency id="SampleDependency" version="1.0" />
</dependencies>
</metadata>
</package>

为了选择在 nuget.org 中唯一的包 ID,您还需要修改 .nuspec 的 ID手动。参见 Create the .nuspec package manifest file了解更多详细信息。

对于编辑问题:

However, the new .nupkg file is still named D.1.0.0.nupkg.

就像回答第一个问题“$$ 形式的标记在打包过程中被替换为项目的 Properties/AssemblyInfo.cs 文件中的值。 "

所以如果你想生成更新版本的包,你应该更新AssemblyInfo.cs中的Assembly Version文件,然后使用 pack 命令行生成 nuget 包:nuget pack xx.csproj .

参见 Replacement tokens有关 token 的更多信息。

编辑更新:

I changed id to SuperUniqueD, and ran nuget pack D.csproj. The package D.3.0.0.nupkg was then created.

由于您使用的是命令:nuget pack D.csproj ,您应该更改项目文件中的 Id 而不是 .nuspec文件:

enter image description here

如果您更改了 .nuspec 中的 ID , 你应该用 .nuspec 打包它文件:nuget pack D.csproj.nuspec

关于c# - 在 Visual Studio 2017 : Properties not updated correctly 中从 .csproj 文件创建 .nupkg,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47137124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com