在dotnet构建中,PackageIcon和PackageIconUrl均不起作用

时间:2019-10-10 12:59:17

标签: c# .net visual-studio msbuild nuget

我正在使用Visual Studio2017。我有一个项目,我想为其生成带有Icon的nuget。 如果我使用

...
<PackageIconUrl>http://blabla/icon.png</PackageIconUrl>

我收到以下错误:

error NU5048: The 'PackageIconUrl'/'iconUrl' element is deprecated. Consider using the 
'PackageIcon'/'icon' element instead. Learn more at https://aka.ms/deprecateIconUrl 
[D:\myproject.csproj]

好的,所以我将项目更改为:

...
    <PackageIcon>core.png</PackageIcon>
...
    <Content Include="..\Shared\core.png" Link="core.png" Pack="true" PackagePath="\" >
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>

现在构建项目(dotnet构建Myproject.csproj)时,没有任何编译错误。 但是,当我想在“ Nuget Package Explorer”中查看生成的nupkg时。我收到错误消息:

The element 'metadata' in namespace 'http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd' 
has invalid child elment 'icon' in namespace 'http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd'.
List of possible elements expected : 'contentFiles, desription, licenseUrl, projectUrl, language, 
releaseNotes, frameworkAssemblies, summary, iconUrl, packageTypes, dependencies, copyright, 
developmentDependency, repositoru, tags, references, title, serviceable' in namespace 
'http://schemas.microsoft.com/packaging/2013/05/nuspec.xsd'.

(因此,似乎生成的嵌入式nuspec具有错误的xml名称空间-我不知道如何使它生成新的名称空间)这是Catch-22。 因此,似乎唯一的选择就是不显示图标。

(我也有Visual Studio 2019,最近安装了.net core 3.0.100 SDK)

3 个答案:

答案 0 :(得分:3)

<iconUrl> / <PackageIconUrl><icon> / <PackageIcon>的转变是相当新的。尽管nuget.org支持使用<icon>而不是<iconUrl>的软件包解析,但其他一些软件包服务器尚不支持。

听起来您只是在使用NuGet软件包资源管理器浏览目录,所以原因可能是这还不了解<icon>

不推荐使用<iconUrl>时,我发现它仍然可以在nuget.org上运行,因此您应该能够继续使用它,直到其他工具赶上来。另外,如果您实际上不关心浏览存储在本地目录中的软件包,而仅关心nuget.org,则可以开始使用<icon>

您甚至可以同时使用两者-我尚未检查。

答案 1 :(得分:0)

至少我认为您可以随时使用PackageIconUrl,就像上面提到的canton7一样,此举相当新。您可以将其视为一种提醒。

对于最新的VS2019 版本版本16.3.3,默认情况下其项目模板仍支持PackageIconUrl。对于.net core.net standard类库项目,如果我们Right-click project=>Package tab可以看到:

enter image description here

它等效于xx.c​​sproj中的<PackageIconUrl>http://xxx/icon.png</PackageIconUrl>,因此我认为您可以忽略该警告或使用<NoWarn>NU5048</NoWarn>

答案 2 :(得分:0)

您需要确保图标是包的一部分。您可以通过解压缩您的 nupkg 文件来验证它是否在那里。

来自Microsoft site

<PropertyGroup>
    ...
    <PackageIcon>icon.png</PackageIcon>
    ...
</PropertyGroup>

<ItemGroup>
    ...
    <None Include="images\icon.png" Pack="true" PackagePath="\"/>
    ...
</ItemGroup>

还有(来自here):

<块引用>

PackageIconUrl 已弃用,取而代之的是 PackageIcon。但是,为了获得最佳的下层体验,除了 PackageIcon 之外,您还应该指定 PackageIconUrl。

还有一个带有图标的示例项目:https://github.com/NuGet/Samples/tree/main/PackageIconExample