为可移植类库创建NuGet包时出错

omn*_*nir 5 .net nuget portable-class-library visual-studio-2013 win-universal-app

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

我遇到了一个问题,我在调用项目文件TestComponent2.csproj的nuget包时收到错误(我是在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>
Run Code Online (Sandbox Code Playgroud)

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

> nuget pack TestComponent2.csproj -Verbosity Detailed
Run Code Online (Sandbox Code Playgroud)

警告:无法从"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.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'in System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean System.Reflection.RuntimeAssembly.nLoad中的throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,B oolean suppressSecurityChecks)

...

将文件'mypath\TestComponent2.dll'添加到'lib\portable-win81 + wpa81\TestComponent2.dll'包中

找到packages.config.使用列为依赖项的包
警告:未指定说明.使用'描述'.
警告:未指定作者.使用'myname'.

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

添加了文件'lib\portable-win81 + wpa81\TestComponent2.dll'.

成功创建了包'mypath\TestComponent2.1.0.nupkg'.

如果我先调用nuget spec我也会收到以下错误:警告:无法从'TestComponent2.dll'中提取元数据.使用'TestComponent2.nuspec'作为元数据.替换标记'title'没有任何价值.

nuget为新的通用PCL创建包有问题吗?或许我有一些配置错误?我正在使用Nuget 2.8.

pjs*_*pjs 8

此问题已在3.0.0中修补

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

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


Mat*_*ard 6

看起来NuGet 2.8中存在一个错误,导致它无法从PCL程序集中读取元数据.

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

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