Nuget autoupdate在网站上

时间:2013-05-02 13:54:47

标签: c#-4.0 asp.net-mvc-4 nuget

对于客户,我们正在尝试构建一个webb应用程序,他们可以构建补丁(新版本),并且他们的客户可以通过点击应用程序更新自己。

我之前对nuget进行了一些小的尝试,并将其作为参考: http://haacked.com/archive/2011/01/15/building-a-self-updating-site-using-nuget.aspx

不幸的是,在这个项目中安装和使用的一些nuget软件包新的和与autoupdate 0.2.1的nuget软件包不兼容的地方使用了NuGet.Core 1.3.20419.9005。

所以我采用自动更新代码并将nuget升级到2.5并使用新的nuget核心修改所有新问题(功能/参数等的更改)。

现在它可以工作,因为我可以安装软件包,我可以看到远程服务器上有一个新版本。当我尝试将本地软件包升级到服务器上的版本时,我得到一个错误: 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

package param是我要升级到的包。

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

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

1 个答案:

答案 0 :(得分:3)

经过大量的时间谷歌搜索和代码检查和重新设计代码,看起来问题出现在Microsoft.AspNet.WebPages.Administration中,它只与NuGet.Core兼容(≥1.6.2&amp;&amp; &lt; 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方法也需要缝合来完成工作,只更新引用或其他东西。当升级到我的软件包的新版本(例如,部署新图像或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文件,到目前为止我已经看到了)。

需要对此进行更多研究。