【发布时间】:2017-11-06 12:31:52
【问题描述】:
我使用 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:
编辑:我按照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" as suggested in the answer. The generatednuspec`` 文件如下所示:
<?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,或者如果它是从AssemblyInfo.cs 读取的,则不应该命名为NewD?
【问题讨论】:
-
这个问题有什么更新吗?你的问题解决了吗?如果没有,请告诉我有关此问题的最新信息。
-
@Leo-MSFT 您好,感谢您的回复。不幸的是,我昨天没有机会测试您的解决方案,因为我病了,没有去上班。我今天将测试您的解决方案并尽快更新。 :-)
-
@Leo-MSFT 我已经测试了您的解决方案,但不幸的是结果并不完全符合我的期望。我已经用我的最新结果更新了我的问题。我误解了你的任何指示吗?
-
您在哪里将
Id更改为SuperUniqueD?您应该在项目文件中更改它。我已经用更详细的信息更新了我的答案,你可以检查它是否对你有帮助。
标签: c# msbuild nuget visual-studio-2017 nuget-package