我是Nuget的新手,我正在尝试为可移植类库项目创建一个NuGet包,该项目对我创建的另一个可移植类库具有包依赖关系。
我遇到一个问题,当我为项目文件 TestComponent2.csproj 调用 nuget pack 时收到错误(我是从VS 2013中的Portable for Universal Apps模板创建的)。该库依赖于从另一个名为 TestComponent1 的PCL创建的nuget包。
创建的程序包似乎从未包含此依赖项(控制台输出甚至显示“Dependencies:None”)。但是,它在 TestComponent2 项目的packages.config文件中,绝对列出了相关性:
<?xml version="1.0" encoding="utf-8"?>
<packages>
<package id="TestComponent1" version="1.0" targetFramework="portable-win81+wpa81" />
</packages>
因此,在我的情况下,我从包含TestComponent2.csproj和packages.config的文件夹中打开了详细信息,从一个名为TestComponent2的项目的命令行调用以下内容:
> nuget pack TestComponent2.csproj -Verbosity Detailed
警告:无法从“TestComponent2.dll”中提取元数据。
警告:System.IO.FileNotFoundException:无法加载文件或程序集'System.Runtime,版本= 4.0.10.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一。该系统找不到指定的文件。
文件名:'System.Runtime,Version = 4.0.10.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'---> System.IO.FileNotFoundException:无法加载文件或程序集'System.Runtime,Version = 4.0.10.0,Culture =中立,PublicKeyToken = b03f5f7f11d50a3a'
或其依赖项之一。该系统找不到指定的文件。
文件名:“System.Runtime,版本= 4.0.10.0,区域性=中性,PublicKeyToken = b03f5f7f11d50a3a”
在System.Reflection.RuntimeAssembly._nLoad(AssemblyName文件名,字符串codeBase,证据assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder, bool throwOnFileNotFound, bool forIntrospection,
bool 类型的hibitSecurityChecks)
在System.Reflection.RuntimeAssembly.nLoad(AssemblyName文件名,字符串codeBase,证据AssemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder, bool throwOnFileNotFound, bool 自省(introspection),B
oolean inhibitorSecurityChecks)
...
将文件'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”。
替换 token “title”没有值(value)。
nuget为新的通用PCL创建软件包是否存在问题?也许我的配置有误?我正在使用Nuget 2.8。
最佳答案
好像有一个bug in NuGet 2.8导致它无法从PCL程序集中读取元数据。
我建议您尝试使用较旧版本的NuGet,但是不幸的是,我认为您需要2.8.1,因为您使用的Windows Phone应用程序目标(wpa)仅在2.8.1或更高版本中受支持。
一种解决方法是使用 nuget包YourNuSpecFile.nuspec 而不是使用项目文件。但是,您需要在.nuspec中放入更多信息才能使它起作用。
关于.net - 为可移植类库创建NuGet软件包时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23676953/