2013-05-02 37 views
2

对于客户,我们正在尝试构建webb应用程序,以便他们可以通过点击应用程序更新来自行构建补丁程序(新版本),并且他们的客户可以自行完成。网站中的Nuget自动更新程序

我以前做对的NuGet一些轻微的experioments,不得不以此为参考: http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx

不幸的是一些安装在这个项目中所使用的的NuGet软件包的更新,并自动更新的NuGet包不兼容0.2.1使用NuGet.Core 1.3.20419.9005。

所以我把自动更新代码和升级的nuget设置为2.5,并修复了新的nuget核心(更改函数/参数等)的所有新问题。

现在,只要安装了我的软件包,我就可以看到远程服务器上有一个新版本。 Howerver,当我尝试升级本地包到服务器上的版本我得到一个错误: System.EntryPointNotFoundException:未找到入口点。

这是哪里的代码出错:

public IEnumerable<string> UpdatePackage(IPackage package) 
    { 
     return this.PerformLoggedAction(delegate 
     { 
      bool updateDependencies = true; 
      bool allowPrereleaseVersions = true; 
      this._projectManager.UpdatePackageReference(package.Id, package.Version, updateDependencies, allowPrereleaseVersions); 
     }); 
    } 

    [EntryPointNotFoundException: Entry point was not found.] 
    NuGet.IProjectSystem.get_ProjectName() +0 
    NuGet.ProjectManager.UpdatePackageReference(String packageId, Func`1 resolvePackage, Boolean updateDependencies, Boolean allowPrereleaseVersions, Boolean targetVersionSetExplicitly) +1014 
    NuGet.ProjectManager.UpdatePackageReference(String packageId, SemanticVersion version, Boolean updateDependencies, Boolean allowPrereleaseVersions) +233 

包参数是我想升级到包。

在我的网络应用程序中,我得到了安装我的.nupkg文件的文件夹\ App_Data \ packages。在我的远程文件夹上,我获得了所有已安装的软件包+我的新版本软件

我不明白入口点是什么以及如何解决这个问题。

回答

3

经过大量的时间使用Google和代码检查和重新设计的代码,它看起来像这个问题是在Microsoft.AspNet.WebPages.Administration至极仅与NuGet.Core(兼容≥1.6.2 & & < 1.7)。重新设计了WebProjectSystem类,现在它还不错。

string webRepositoryDirectory = WebProjectManager.GetWebRepositoryDirectory(siteRoot); 
     IPackageRepository sourceRepository = PackageRepositoryFactory.Default.CreateRepository(remoteSource); 
     IPackagePathResolver pathResolver = new DefaultPackagePathResolver(webRepositoryDirectory); 
     IPackageRepository localRepository = PackageRepositoryFactory.Default.CreateRepository(webRepositoryDirectory); 
     IProjectSystem project = new WebProjectSystem(siteRoot); 
     this._projectManager = new ProjectManager(sourceRepository, pathResolver, project, localRepository); 

UpdatePackage方法也dosent缝做的工作,只更新引用或东西。当uppgrading我包的新版本,正如我需要使用下面的方法来代替(如部署新图像或HTML文件)缝线:

public IEnumerable<string> InstallPackage(IPackage package) 
    { 
     return this.PerformLoggedAction(delegate 
     { 
      bool ignoreDependencies = false; 
      bool allowPrereleaseVersions = true; 
      this._projectManager.AddPackageReference(package.Id, package.Version, ignoreDependencies, allowPrereleaseVersions); 
     }); 
    } 

这个经过我的包中的所有文件和接缝更换他们。 然而,我有一些奇怪的问题,升级后一些文件得到0字节(只有二进制DLL文件,到目前为止我所看到的)。

需要更多的研究。

+0

你有没有得到任何更好的结果呢?我也更新了WPS类,从Haacked的更新后的帖子(现在来源于GitHub - http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx )但仍然得到EntryPointNotFoundException。 – sebastiaan 2013-09-18 16:14:24