我是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
警告:无法从&#39; TestComponent2.dll&#39;中提取元数据。 警告:System.IO.FileNotFoundException:无法加载文件或程序集System.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39;或其中一个依赖项。该系统找不到指定的文件。 文件名:&#39; System.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39; ---&GT; System.IO.FileNotFoundException:无法加载文件或程序集System.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39; 或其中一个依赖项。该系统找不到指定的文件。 文件名:&#39; System.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a&#39; 在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection, 布尔值suppressSecurityChecks) at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&amp; stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,B oolean suppressSecurityChecks)
...
添加文件&#39; mypath \ TestComponent2.dll&#39;包装为&#39; lib \ portable-win81 + wpa81 \ TestComponent2.dll&#39;
找到packages.config。使用列为依赖项的包
警告:未指定说明。使用&#39;说明&#39;
警告:未指定作者。使用&#39; myname&#39;。
Id:TestComponent2
版本:1.0
作者:myname
描述:描述
依赖性:无
添加了文件&#39; lib \ portable-win81 + wpa81 \ TestComponent2.dll&#39;。
成功创建了包&#39; mypath \ TestComponent2.1.0.nupkg&#39;。
如果我先调用 nuget spec ,我也会收到以下错误: 警告:无法从&#39; TestComponent2.dll&#39;中提取元数据。 使用&#39; TestComponent2.nuspec&#39;用于元数据。 替换令牌&#39;标题&#39;没有价值。
nuget为新的通用PCL创建包有问题吗?或许我有一些配置错误?我正在使用Nuget 2.8。
答案 0 :(得分:8)
此问题为patched in 3.0.0
直到3.0.0发布,我创建了this repository,其中包含我过去几个月一直在使用的修补可执行文件。存储库还包含一个示例项目,以便更好地可视化问题以及在简单但意外的情况下如何发生问题。
可执行文件的直接链接位于:https://bitbucket.org/patsissons/nugetpclissue/src/HEAD/.nuget-patched/NuGet.exe?at=master
答案 1 :(得分:6)
看起来有一个bug in NuGet 2.8导致它无法从PCL程序集中读取元数据。
我打算建议您尝试使用旧版本的NuGet但不幸的是我认为您需要2.8.1,因为您使用的是Windows Phone应用程序目标(wpa),仅支持2.8.1或更高版本。
解决方法是使用 nuget pack YourNuSpecFile.nuspec 而不是使用项目文件。但是,您需要在.nuspec中添加更多信息才能使其正常工作。