5

我是 Nuget 的新手,我正在尝试为可移植类库项目创建一个 NuGet 包,该项目对我创建的另一个可移植类库具有包依赖项。

我遇到了一个问题,即在为项目文件TestComponent2.csproj调用nuget pack时收到错误消息(我是从 VS 2013 中的 Portable for Universal Apps 模板创建的)。该库依赖于从另一个名为TestComponent1的 PCL 创建的 nuget 包。

创建的包似乎从未包含此依赖项(控制台输出甚至显示“依赖项:无”)。但是,在TestComponent2项目的 packages.config 文件中,肯定会列出依赖项:

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="TestComponent1" version="1.0" targetFramework="portable-win81+wpa81" />
</packages>

所以在我的情况下,我从命令行为一个名为 TestComponent2 的项目调用以下命令,从包含 TestComponent2.csproj 和 packages.config 的文件夹中,打开详细程度:

> nuget pack TestComponent2.csproj -Verbosity Detailed

警告:无法从“TestComponent2.dll”中提取元数据。警告:System.IO.FileNotFoundException:无法加载文件或程序集“System.Runtime,Version=4.0.10.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”或其依赖项之一。该系统找不到指定的文件。文件名:'System.Runtime,Version=4.0.10.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a'---> System.IO.FileNotFoundException:无法加载文件或程序集'System.Runtime,Version=4.0.10.0,Culture =neutral, PublicKeyToken=b03f5f7f11d50a3a' 或其依赖项之一。该系统找不到指定的文件。文件名:System.Reflection.RuntimeAssembly._nLoad 中的“System.Runtime,版本=4.0.10.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a”。

...

添加文件“mypath\TestComponent2.dll”打包为“lib\portable-win81+wpa81\TestComponent2.dll”

找到 packages.config。使用列为依赖项的包
警告:未指定说明。使用“描述”。
警告:未指定作者。使用“我的名字”。

ID:TestComponent2
版本:1.0
作者:myname
描述:描述
依赖关系:无

添加了文件“lib\portable-win81+wpa81\TestComponent2.dll”。

成功创建包“mypath\TestComponent2.1.0.nupkg”。

如果我首先调用nuget 规范,我还会收到以下错误:警告:无法从“TestComponent2.dll”中提取元数据。对元数据使用“TestComponent2.nuspec”。替换标记“title”没有任何价值。

nuget 为新的通用 PCL 创建包是否存在问题?或者也许我有一些配置错误?我正在使用 Nuget 2.8。

4

2 回答 2

8

此问题已在 3.0.0中修复

在 3.0.0 发布之前,我已经创建了这个存储库,其中包含我过去几个月一直在使用的修补过的可执行文件。该存储库还包含一个示例项目,以更好地可视化问题以及它如何在简单但意外的情况下发生。

可执行文件的直接链接在这里:https ://bitbucket.org/patsissons/nugetpclissue/src/HEAD/.nuget-patched/NuGet.exe?at=master

于 2015-04-17T19:49:41.240 回答
6

NuGet 2.8 中似乎存在一个错误,导致它无法从 PCL 程序集中读取元数据。

我打算建议您尝试旧版本的 NuGet,但不幸的是,我认为您需要 2.8.1,因为您使用的是仅在 2.8.1 或更高版本中受支持的 Windows Phone 应用程序目标 (wpa)。

一种解决方法是使用nuget pack YourNuSpecFile.nuspec而不是使用项目文件。但是,您需要在 .nuspec 中添加更多信息才能使其正常工作。

于 2014-05-15T13:23:16.767 回答