c# - 如何以编程方式将静态 HTML 站点上传到 Windows Azure 网站?

标签 c# azure webdeploy azure-web-app-service kudu

我目前正在用 C# 构建本地静态站点生成器。它将一堆模板编译成普通旧 HTML 文件的层次结构。我想将生成的文件上传到我的 Windows Azure 网站并实时反射(reflect)更改,并且我希望能够通过我的脚本以编程方式执行此操作。

就目前情况而言,我必须使用 WebMatrix 手动上传生成的文件,因为我无法找到可让我直接将 HTML 上传到 Windows Azure 网站的 API 或 SDK。

当然,除了使用 sFTP 库之外,还必须有一种方法可以从代码中执行此操作(因为它不使用 WebMatrix/IIS 协议(protocol),我认为该协议(protocol)发送压缩的差异,速度会很慢,并且意味着上传期间数据不同步,而某些文件已更新,而其他文件尚未更新。)如果可以避免的话,我也不想将生成的网站提交到源代码管理。对我来说,仅仅将某些东西作为部署的实现细节放入源代码控制中似乎在概念上是错误的。

更新:WebMatrix 内部使用 Web Deploy (MSDeploy)。理论上,您应该能够使用 API 自己构建部署包,但我能找到的 99% 的示例都是使用命令行工具或 Visual Studio 中的 GUI 工具。我需要构建包并从 C# 中以编程方式部署它。关于如何解决这个问题有什么想法或指导吗? MSDN 上的文档并没有真正显示这种情况的任何示例。

最佳答案

好的,我在 Microsoft 的几个友好人员的帮助下弄清楚了该怎么做。 (请参阅 David's Ebbo's response to my forum question ,以及来自 Sayed Hashimi 的非常有用的信息,展示了如何从 msdeploy.exe 控制台应用程序准确地执行我想要执行的操作)。

只需从 Azure Web 门户获取 PublishSettings 文件即可。在文本编辑器中打开它以将值粘贴到以下代码中。

var destinationOptions = new DeploymentBaseOptions()
{
    // userName from Azure Websites PublishSettings file
    UserName = "$msdeploytest",
    // pw from PublishSettings file
    Password = "ThisIsNotMyPassword",
    // publishUrl from PublishSettings file using https: protocol prefix rather than 443 port
    // and adding "/msdeploy.axd?site={msdeploySite-variable-from-PublishSettings}"
    ComputerName = "https://waws-prod-blu-003.publish.azurewebsites.windows.net/msdeploy.axd?site=msdeploytest",
    AuthenticationType = "Basic"
};
                                                             // This option says we're giving it a directory to deploy
using (var deploymentObject = DeploymentManager.CreateObject(DeploymentWellKnownProvider.ContentPath,
                                                             // path to root directory of source files 
                                                             @"C:\Users\ryan_000\Downloads\dummysite"))
{
    var syncOptions = new DeploymentSyncOptions();
    syncOptions.WhatIf = false;
                                                                                   // "msdeploySite" variable from PublishSettings file
    var changes = deploymentObject.SyncTo(DeploymentWellKnownProvider.ContentPath, "msdeploytest", destinationOptions, syncOptions);
    Console.WriteLine("BytesCopied:       " + changes.BytesCopied.ToString());
    Console.WriteLine("Added:             " + changes.ObjectsAdded.ToString());
    Console.WriteLine("Updated:           " + changes.ObjectsUpdated.ToString());
    Console.WriteLine("Deleted:           " + changes.ObjectsDeleted.ToString());
    Console.WriteLine("Errors:            " + changes.Errors.ToString());
    Console.WriteLine("Warnings:          " + changes.Warnings.ToString());
    Console.WriteLine("ParametersChanged: " + changes.ParameterChanges.ToString());
    Console.WriteLine("TotalChanges:      " + changes.TotalChanges.ToString());
}

您也许还可以跌跌撞撞地通过 obscure documentation on MSDN 。有很多名称奇怪的选项类,但是只要眯起眼睛并在文档中翻来覆去,就可以看到命令行选项(在网上找到示例要容易得多) ) 映射到 API 调用。

关于c# - 如何以编程方式将静态 HTML 站点上传到 Windows Azure 网站?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117783/

相关文章:

c# - asp.net 在 c# 中使用 switch case for datetime.now.hour 格式

Azure Blob 存储限制

java - Azure Webapp Java Rest API 端点不起作用

azure - Microsoft Azure EventHub 中的事件保留

asp.net - MSDeploy setParameter.xml 不转换 web.config

azure - 502 - Web 服务器在充当网关或代理服务器时收到无效响应

c# - web.config 连接字符串在发布时更改

c# - 如何通过反射加载的接口(interface)调用.net dll中的函数

c# - 在文本文件中查找所有相似的行

C# 引用数组