2014-05-20 53 views
4

我复制了HelloMvc项目文件夹到另一个文件夹“瑞奇”跑KPM恢复时找到Microsoft.AspNet.Server.WebListener,我得到了以下的输出: enter image description here无法运行KPM恢复

我不知道怎么了。 “kpm restore”在其从asp.net/home存储库克隆的原始文件夹中成功运行。

回答

8

最后我想出了解决方案。感谢ASP.NET vNext的开源,我找到了“restore”命令的源代码。

在还原过程中,restore命令尝试用这种方法找出项目的“根”文件夹:

public static string ResolveRootDirectory(string projectDir) 
{ 
    var di = new DirectoryInfo(projectDir); 

    while (di.Parent != null) 
    { 
     if (di.EnumerateFiles("*.global.json").Any() || 
      di.EnumerateFiles("*.sln").Any() || 
      di.EnumerateDirectories("packages").Any() || 
      di.EnumerateDirectories(".git").Any()) 
     { 
      return di.FullName; 
     } 

     di = di.Parent; 
    } 

    return Path.GetDirectoryName(projectDir); 
} 

因为HelloMvc文件夹没有这些文件或文件夹的包,所以HelloMvc的父文件夹将成为根文件夹。

根文件夹很重要,因为我们需要将“NuGet.config”文件复制到根文件夹。 NuGet.config指示“AspNetVNext”的包源,因此可以找到asp.net vNext的程序集。

<configuration> 
    <packageSources> 
     <add key="AspNetVNext" value="https://www.myget.org/F/aspnetvnext/" /> 
     <add key="NuGet.org" value="https://nuget.org/api/v2/" /> 
    </packageSources> 
    <packageSourceCredentials> 
     <AspNetVNext> 
      <add key="Username" value="aspnetreadonly" /> 
      <add key="ClearTextPassword" value="4d8a2d9c-7b80-4162-9978-47e918c9658c" /> 
     </AspNetVNext> 
    </packageSourceCredentials> 
</configuration> 

为我自己,我在HelloMvc文件夹中创建一个包文件夹和复制NuGet.config到HelloMvc文件夹。所以HelloMvc文件夹本身就是根文件夹,而NuGet.config就位,kpm restore成功。

+0

谢谢 - 在阅读本文之前,我还陷入了一段时间!在这里找到类似的东西 - https://github.com/aspnet/KRuntime/issues/192 – Sornakumar

+0

甜蜜!感谢那个决议。我最终将NuGet.config放在我的目录中的一个文件夹中 - c:\ mk \ dev \ vnext。和当前位于其下的子文件夹中的所有应用程序。 – mikekidder

1

这些特定版本的软件包可能不再可用于CI服务器。

用文本编辑器打开project.json并用*版本替换特定版本。 例如:

"Microsoft.AspNet.Diagnostics": "0.1-alpha-build-0623", 
"Microsoft.AspNet.Hosting": "0.1-alpha-build-0519", 
"Microsoft.AspNet.Server.WebListener": "0.1-alpha-build-0469" 

成为

"Microsoft.AspNet.Diagnostics": "0.1-alpha-*", 
"Microsoft.AspNet.Hosting": "0.1-alpha-*", 
"Microsoft.AspNet.Server.WebListener": "0.1-alpha-*", 

*版本的意思是 “捡了最新版本的软件包”。

+0

所有这些版本都存在于MyGet中,所以根本不应该成为问题。 – Eilon

+0

准确。我将它们更改为'0.1-alpha- *'并得到相同的“找不到”错误。 – Ricky

0

最简单的解决方案是; 在主应用程序目录中添加/创建NuGet.config文件,NuGet.config的内容为;

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <packageSources> 
    <add key="AspNetVNext" value="https://www.myget.org/F/aspnetmaster/api/v2" /> 
    <add key="NuGet.org" value="https://nuget.org/api/v2/" /> 
    </packageSources> 
</configuration> 

然后确保你的应用程序文件夹是从nuget.config文件下一个层面上,文件夹结构;

[Main_Folder]
          Nuget.config
          [Application_Folder]

那么它应该工作!