c#-4.0 - 网站中的 Nuget 自动更新

标签 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

包参数是我想要升级到的包。

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

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

最佳答案

经过大量时间谷歌搜索、代码检查和重新设计代码,问题似乎出在仅与 NuGet.Core 兼容的 Microsoft.AspNet.WebPages.Administration (≥ 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 方法也没有接缝来完成这项工作,仅更新引用或其他内容。当升级到我的包的新版本(例如部署新图像或 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 文件,我到目前为止所看到的)。

需要对此进行更多研究。

关于c#-4.0 - 网站中的 Nuget 自动更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16339919/

相关文章:

c# - 从字符串中删除所有内容,包括XYZ

javascript - 通过 jQuery Controller 打开另一个 View ?

visual-studio-2013 - 从 csproj 创建 nuget 包时文件夹结构错误

nuget - 阻止发布到公共(public) NuGet 库

c# - .NET Framework 依赖关系树

c# - 在调用 Read() 之前访问字段的尝试无效。代码不工作

c# - 根据是否重复返回true或false

c# - 在c#中删除 ""之间的逗号

asp.net-mvc-4 - "Execute Code First Migrations"复选框从我的发布配置文件中消失了

knockout.js - Breeze 和 Knockout 中的验证